diff options
| author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2016-08-31 03:42:07 +0200 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2016-08-31 03:42:07 +0200 | 
| commit | 75ed3a79bf4fdcb71dd709495de544cb6cef17b3 (patch) | |
| tree | 67e4b404206c31d3d7d52673c12eb9f756db5c64 /sample | |
| parent | c752981613de81bfa2723749b79e80bf0008f27c (diff) | |
| parent | a76fa337cc657dbe669ffb8dbdac606d4d6616f1 (diff) | |
Merge tag 'upstream/6.1.0'
Upstream version 6.1.0
Diffstat (limited to 'sample')
| -rw-r--r-- | sample/.gitignore | 1 | ||||
| -rw-r--r-- | sample/Makefile.am | 8 | ||||
| -rw-r--r-- | sample/bug_fix.c | 131 | ||||
| -rw-r--r-- | sample/scan.c | 88 | 
4 files changed, 225 insertions, 3 deletions
| diff --git a/sample/.gitignore b/sample/.gitignore index 963d2e4..79fab44 100644 --- a/sample/.gitignore +++ b/sample/.gitignore @@ -7,4 +7,5 @@  /sql  /syntax  /user_property +/bug_fix  /log* diff --git a/sample/Makefile.am b/sample/Makefile.am index 53f0d08..6799ecd 100644 --- a/sample/Makefile.am +++ b/sample/Makefile.am @@ -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 index 0000000..9a45a78 --- /dev/null +++ b/sample/bug_fix.c @@ -0,0 +1,131 @@ +/* + * 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(®, 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; +} + +static int +exec(OnigEncoding enc, OnigOptionType options, char* apattern, char* astr) +{ +  int r; +  unsigned char *end; +  regex_t* reg; +  OnigErrorInfo einfo; +  UChar* pattern = (UChar* )apattern; +  UChar* str     = (UChar* )astr; + +  onig_initialize(&enc, 1); + +  r = onig_new(®, pattern, +	       pattern + onigenc_str_bytelen_null(enc, pattern), +	       options, enc, ONIG_SYNTAX_DEFAULT, &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(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 */ + +  exec(ONIG_ENCODING_UTF8, ONIG_OPTION_NONE, "(\\2)(\\1)", "aa"); /* fail. */ + +  exec(ONIG_ENCODING_UTF8, ONIG_OPTION_FIND_LONGEST, +       "a*", "aa aaa aaaa aaaaa "); /* match 12-17 */ + +  return 0; +} diff --git a/sample/scan.c b/sample/scan.c new file mode 100644 index 0000000..ad5ae74 --- /dev/null +++ b/sample/scan.c @@ -0,0 +1,88 @@ +/* + * scan.c + */ +#include <stdio.h> +#include <stdlib.h> +#include "oniguruma.h" + +static int +scan_callback(int n, int r, OnigRegion* region, void* arg) +{ +  int i; + +  fprintf(stdout, "scan: %d\n", n); + +  fprintf(stdout, "match at %d\n", r); +  for (i = 0; i < region->num_regs; i++) { +    fprintf(stdout, "%d: (%d-%d)\n", i, region->beg[i], region->end[i]); +  } + +  return 0; +} + +static int +scan(regex_t* reg, unsigned char* str, unsigned char* end) +{ +  int r; +  OnigRegion *region; + +  region = onig_region_new(); + +  r = onig_scan(reg, str, end, region, ONIG_OPTION_NONE, scan_callback, NULL); +  if (r >= 0) { +    fprintf(stdout, "total: %d match\n", r); +  } +  else { /* error */ +    char s[ONIG_MAX_ERROR_MESSAGE_LEN]; +    onig_error_code_to_str((OnigUChar* )s, r); +    fprintf(stderr, "ERROR: %s\n", s); +    return -1; +  } + +  onig_region_free(region, 1 /* 1:free self, 0:free contents only */); +  return 0; +} + +static int +exec(OnigEncoding enc, OnigOptionType options, char* apattern, char* astr) +{ +  int r; +  unsigned char *end; +  regex_t* reg; +  OnigErrorInfo einfo; +  UChar* pattern_end; +  UChar* pattern = (UChar* )apattern; +  UChar* str     = (UChar* )astr; + +  onig_initialize(&enc, 1); + +  pattern_end = pattern + onigenc_str_bytelen_null(enc, pattern); + +  r = onig_new(®, pattern, pattern_end, options, enc, ONIG_SYNTAX_DEFAULT, &einfo); +  if (r != ONIG_NORMAL) { +    char s[ONIG_MAX_ERROR_MESSAGE_LEN]; +    onig_error_code_to_str((OnigUChar* )s, r, &einfo); +    fprintf(stderr, "ERROR: %s\n", s); +    return -1; +  } + +  end = str + onigenc_str_bytelen_null(enc, str); +  r = scan(reg, str, end); + +  onig_free(reg); +  onig_end(); +  return 0; +} + + +extern int main(int argc, char* argv[]) +{ +  exec(ONIG_ENCODING_UTF8, ONIG_OPTION_NONE, +       "\\Ga+\\s*", "a aa aaa baaa"); + +  fprintf(stdout, "\n"); +  exec(ONIG_ENCODING_UTF8, ONIG_OPTION_NONE, +       "a+\\s*", "a aa aaa baaa"); + +  return 0; +} | 
