]> granicus.if.org Git - onig/commitdiff
add user_property.c
authorK.Kosako <kkosako0@gmail.com>
Thu, 5 May 2016 10:35:30 +0000 (19:35 +0900)
committerK.Kosako <kkosako0@gmail.com>
Thu, 5 May 2016 10:35:30 +0000 (19:35 +0900)
sample/.gitignore
sample/Makefile.am
sample/user_property.c [new file with mode: 0644]

index 8b92ae01a7a08273c5b0ee9d0d5bcc923d079133..963d2e402140d076c2f2df49830c3aacd2b1fbff 100644 (file)
@@ -6,4 +6,5 @@
 /simple
 /sql
 /syntax
+/user_property
 /log*
index 8729e836932d5d91030fae59820ea432d5373d80..53f0d0859d0858d0f4923627e664f608e492f022 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
+TESTS = encode listcap names posix simple sql syntax user_property
 
-check_PROGRAMS = encode listcap names posix simple sql syntax
+check_PROGRAMS = encode listcap names posix simple sql syntax user_property
 
 encode_SOURCES  = encode.c
 listcap_SOURCES = listcap.c
@@ -17,11 +17,11 @@ posix_SOURCES   = posix.c
 simple_SOURCES  = simple.c
 sql_SOURCES     = sql.c
 syntax_SOURCES  = syntax.c
-
+user_property_SOURCES = user_property.c
 
 sampledir = .
 
-test: encode listcap names posix simple sql syntax
+test: encode listcap names posix simple sql syntax user_property
        $(sampledir)/encode
        $(sampledir)/listcap
        $(sampledir)/names
@@ -29,3 +29,4 @@ test: encode listcap names posix simple sql syntax
        $(sampledir)/simple
        $(sampledir)/sql
        $(sampledir)/syntax
+       $(sampledir)/user_property
diff --git a/sample/user_property.c b/sample/user_property.c
new file mode 100644 (file)
index 0000000..5750b58
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * user_property.c
+ */
+#include <stdio.h>
+#include <string.h>
+#include "oniguruma.h"
+
+extern int
+main(int argc, char* argv[])
+{
+  int r;
+  unsigned char *start, *range, *end;
+  regex_t* reg;
+  OnigErrorInfo einfo;
+  OnigRegion *region;
+
+  static OnigCodePoint handakuon_hiragana[] = {
+    5,
+    0x3071, 0x3071, /* PA */
+    0x3074, 0x3074, /* PI */
+    0x3077, 0x3077, /* PU */
+    0x307a, 0x307a, /* PE */
+    0x307d, 0x307d  /* PO */
+  };
+
+  static UChar* pattern = (UChar* )"\\A(\\p{HandakuonHiragana}{5})\\p{^HandakuonHiragana}\\z";
+  /* "PA PI PU PE PO a" */
+  static UChar* str = (UChar* )"\343\201\261\343\201\264\343\201\267\343\201\272\343\201\275a";
+
+  OnigEncoding use_encs[] = { ONIG_ENCODING_UTF8 };
+  onig_initialize(use_encs, sizeof(use_encs)/sizeof(use_encs[0]));
+
+  r = onig_unicode_define_user_property("HandakuonHiragana",
+                                       handakuon_hiragana);
+  if (r == ONIG_NORMAL) {
+    fprintf(stdout, "define HandakuonHiragana\n");
+  }
+  else {
+    char s[ONIG_MAX_ERROR_MESSAGE_LEN];
+    onig_error_code_to_str(s, r);
+    fprintf(stderr, "ERROR: %s\n", s);
+    return -1;
+  }
+
+  r = onig_new(&reg, pattern, pattern + strlen((char* )pattern),
+       ONIG_OPTION_DEFAULT, ONIG_ENCODING_UTF8, ONIG_SYNTAX_DEFAULT, &einfo);
+  if (r == ONIG_NORMAL) {
+    fprintf(stdout, "onig_new: success.\n");
+  }
+  else {
+    char s[ONIG_MAX_ERROR_MESSAGE_LEN];
+    onig_error_code_to_str(s, r, &einfo);
+    fprintf(stderr, "onig_new: ERROR: %s\n", s);
+    return -1;
+  }
+
+  region = onig_region_new();
+
+  end   = str + strlen((char* )str);
+  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\n", r);
+    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\n");
+  }
+  else { /* error */
+    char s[ONIG_MAX_ERROR_MESSAGE_LEN];
+    onig_error_code_to_str(s, r);
+    fprintf(stderr, "ERROR: %s\n", s);
+    return -1;
+  }
+
+  onig_region_free(region, 1 /* 1:free self, 0:free contents only */);
+  onig_free(reg);
+  onig_end();
+  return 0;
+}