zscan 0.3 → 0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/ext/zscan.c +6 -8
  3. data/lib/zscan.rb +7 -3
  4. data/zscan.gemspec +1 -1
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4ea1628b5cfb954748386729a21dffe6c6d6d25b
4
- data.tar.gz: 915abaa26d3e019bb92aa83df60401d7588feead
3
+ metadata.gz: 6a5bd6b35e34b41d8a18d878abea07f10f1cd645
4
+ data.tar.gz: 6e7b07d3f38f8914aead7fe1eab3f1d047e894cc
5
5
  SHA512:
6
- metadata.gz: 6019ff48939fd372026edf8658f4dbf0c39b29f412e9be211b25134169b01bdc30530057f64481189177b62e1f02bfee6ee8f1983b9fb155b9140cc48ce70d46
7
- data.tar.gz: 616662d24c577dadd4b6e6dc3b9e2af1b174ffcc526c336a45b8c96fcfd9682e2c30b590a88426f52eb2c410ab97a45162b13b3256b2258f69f64bc476d8bf44
6
+ metadata.gz: 0d38acf3d95a7e3d4b8094d1904566b9520fbcb9928ab94c18965bac645bca2d2f035172562b42592a812c5cc9bdb67266517fdb43527394427a84919e11cf96
7
+ data.tar.gz: 1c82a243bbc008bf5d040179fddf5f3b12d186c1ce25454661d34cc2562a0e0db4ff01966639cac610e2e05a4e33848cb540b0252944982f8a22cb00841bc2b6
data/ext/zscan.c CHANGED
@@ -11,7 +11,6 @@ typedef struct {
11
11
  size_t pos;
12
12
  size_t bytepos;
13
13
  VALUE s;
14
- struct re_registers regs;
15
14
  size_t stack_i;
16
15
  size_t stack_cap;
17
16
  Pos* stack;
@@ -26,15 +25,13 @@ static void zscan_mark(void* pp) {
26
25
 
27
26
  static void zscan_free(void* pp) {
28
27
  ZScan* p = pp;
29
- onig_region_free(&(p->regs), 0);
30
28
  free(p->stack);
31
29
  ruby_xfree(p);
32
30
  }
33
31
 
34
- extern size_t onig_region_memsize P_((const struct re_registers *regs));
35
32
  static size_t zscan_memsize(const void* pp) {
36
33
  const ZScan* p = pp;
37
- return p ? sizeof(*p) - sizeof(p->regs) + onig_region_memsize(&p->regs) : 0;
34
+ return p ? sizeof(*p) : 0;
38
35
  }
39
36
 
40
37
  static const rb_data_type_t zscan_type = {
@@ -45,7 +42,6 @@ static const rb_data_type_t zscan_type = {
45
42
  static VALUE zscan_alloc(VALUE klass) {
46
43
  ZScan* p = ALLOC(ZScan);
47
44
  MEMZERO(p, ZScan, 1);
48
- onig_region_init(&(p->regs));
49
45
  p->s = Qnil;
50
46
  p->stack_cap = 5;
51
47
  p->stack = (Pos*)malloc(sizeof(Pos) * 5);
@@ -168,12 +164,14 @@ static VALUE zscan_bmatch_p(VALUE self, VALUE pattern) {
168
164
  } else if (TYPE(pattern) == T_REGEXP) {
169
165
  regex_t *re = rb_reg_prepare_re(pattern, p->s);
170
166
  int tmpreg = re != RREGEXP(pattern)->ptr;
171
- if (!tmpreg) RREGEXP(pattern)->usecnt++;
167
+ if (!tmpreg) {
168
+ RREGEXP(pattern)->usecnt++;
169
+ }
172
170
 
173
171
  char* ptr = RSTRING_PTR(p->s);
174
172
  UChar* ptr_end = (UChar*)(ptr + RSTRING_LEN(p->s));
175
173
  UChar* ptr_match_from = (UChar*)(ptr + p->bytepos);
176
- long ret = onig_match(re, (UChar*)ptr, ptr_end, ptr_match_from, &(p->regs), ONIG_OPTION_NONE);
174
+ long ret = onig_match(re, (UChar*)ptr, ptr_end, ptr_match_from, NULL, ONIG_OPTION_NONE);
177
175
 
178
176
  if (!tmpreg) {
179
177
  RREGEXP(pattern)->usecnt--;
@@ -190,7 +188,7 @@ static VALUE zscan_bmatch_p(VALUE self, VALUE pattern) {
190
188
  if (ret == -2) {
191
189
  rb_raise(rb_eRuntimeError, "regexp buffer overflow");
192
190
  } else if (ret >= 0) {
193
- return ULONG2NUM(p->regs.end[0]);
191
+ return LONG2NUM(ret);
194
192
  }
195
193
  } else {
196
194
  rb_raise(rb_eTypeError, "expect String or Regexp");
data/lib/zscan.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require_relative "../ext/zscan"
2
2
 
3
3
  class ZScan
4
- VERSION = '0.3'
4
+ VERSION = '0.4'
5
5
 
6
6
  def initialize s, dup=false
7
7
  _internal_init dup ? s.dup : s
@@ -58,11 +58,15 @@ if __FILE__ == $PROGRAM_NAME
58
58
  z.bytepos = 2
59
59
  assert '你', z.scan('你')
60
60
  assert '好', z.rest
61
+
61
62
  z.bytepos = 20
62
63
  assert 8, z.bytepos
63
- assert 4, z.pos
64
+
64
65
  z.skip('ab')
65
66
  assert 8, z.bytepos
66
67
  assert 4, z.pos
67
- z = nil
68
+
69
+ z = ZScan.new "a x:b+ $ \\k<x>"
70
+ z.pos = 1
71
+ assert ' ', z.scan(/\s*(\#.*$\s*)*/)
68
72
  end
data/zscan.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "zscan"
3
- s.version = "0.3"
3
+ s.version = "0.4"
4
4
  s.author = "Zete Lui"
5
5
  s.homepage = "https://github.com/luikore/zscan"
6
6
  s.platform = Gem::Platform::RUBY
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zscan
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zete Lui