diff options
author | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-18 22:13:10 +0000 |
---|---|---|
committer | tadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-01-18 22:13:10 +0000 |
commit | 49d65bc4d62d0ad09adaac897edbeb192f2c125d (patch) | |
tree | 36372e89536e1f11730213b4d9d232b194241c80 /ext/date/date_parse.c | |
parent | 0a99ea86f47656eede005c5ebc25947e0e79a67b (diff) | |
download | ruby-49d65bc4d62d0ad09adaac897edbeb192f2c125d.tar.gz |
ext/date/date_parse.c: [ruby-core:42173].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34335 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/date/date_parse.c')
-rw-r--r-- | ext/date/date_parse.c | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/ext/date/date_parse.c b/ext/date/date_parse.c index 597c25ac55..903163003c 100644 --- a/ext/date/date_parse.c +++ b/ext/date/date_parse.c @@ -1,5 +1,5 @@ /* - date_parse.c: Coded by Tadayoshi Funaba 2011 + date_parse.c: Coded by Tadayoshi Funaba 2011,2012 */ #include "ruby.h" @@ -236,6 +236,26 @@ regcomp(const char *source, long len, int opt) #define REGCOMP_0(pat) REGCOMP(pat, 0) #define REGCOMP_I(pat) REGCOMP(pat, ONIG_OPTION_IGNORECASE) +#define MATCH(s,p,c) \ +{ \ + return match(s, p, hash, c); \ +} + +static int +match(VALUE str, VALUE pat, VALUE hash, int (*cb)(VALUE, VALUE)) +{ + VALUE m; + + m = f_match(pat, str); + + if (NIL_P(m)) + return 0; + + (*cb)(m, hash); + + return 1; +} + #define SUBS(s,p,c) \ { \ return subs(s, p, hash, c); \ @@ -1726,7 +1746,7 @@ iso8601_ext_datetime(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, iso8601_ext_datetime_cb); + MATCH(str, pat, iso8601_ext_datetime_cb); } #undef SNUM @@ -1817,7 +1837,7 @@ iso8601_bas_datetime(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, iso8601_bas_datetime_cb); + MATCH(str, pat, iso8601_bas_datetime_cb); } #undef SNUM @@ -1860,7 +1880,7 @@ iso8601_ext_time(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, iso8601_ext_time_cb); + MATCH(str, pat, iso8601_ext_time_cb); } static int @@ -1872,7 +1892,7 @@ iso8601_bas_time(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, iso8601_bas_time_cb); + MATCH(str, pat, iso8601_bas_time_cb); } VALUE @@ -1940,7 +1960,7 @@ rfc3339(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, rfc3339_cb); + MATCH(str, pat, rfc3339_cb); } VALUE @@ -2004,7 +2024,7 @@ xmlschema_datetime(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, xmlschema_datetime_cb); + MATCH(str, pat, xmlschema_datetime_cb); } #undef SNUM @@ -2045,7 +2065,7 @@ xmlschema_time(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, xmlschema_time_cb); + MATCH(str, pat, xmlschema_time_cb); } #undef SNUM @@ -2086,7 +2106,7 @@ xmlschema_trunc(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, xmlschema_trunc_cb); + MATCH(str, pat, xmlschema_trunc_cb); } VALUE @@ -2157,7 +2177,7 @@ rfc2822(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, rfc2822_cb); + MATCH(str, pat, rfc2822_cb); } VALUE @@ -2215,7 +2235,7 @@ httpdate_type1(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, httpdate_type1_cb); + MATCH(str, pat, httpdate_type1_cb); } #undef SNUM @@ -2262,7 +2282,7 @@ httpdate_type2(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, httpdate_type2_cb); + MATCH(str, pat, httpdate_type2_cb); } #undef SNUM @@ -2303,7 +2323,7 @@ httpdate_type3(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, httpdate_type3_cb); + MATCH(str, pat, httpdate_type3_cb); } VALUE @@ -2377,7 +2397,7 @@ jisx0301(VALUE str, VALUE hash) static VALUE pat = Qnil; REGCOMP_I(pat); - SUBS(str, pat, jisx0301_cb); + MATCH(str, pat, jisx0301_cb); } VALUE |