zscan 0.1 → 0.2

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 +4 -1
  3. data/lib/zscan.rb +19 -4
  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: 708c4bbc6710c4d02ed3def05702611c16cd187a
4
- data.tar.gz: aaf8f91e2a98fcfb18d589d4e6bb6687aeb46ca9
3
+ metadata.gz: 009307140540b30af03fa7d83fc942d4a9aa920a
4
+ data.tar.gz: 414f4fd5ee5b063da7cdb3ad5eb10d21a2b5dcbc
5
5
  SHA512:
6
- metadata.gz: a322da85ae70a1b35f33d02a9d5862250f59058c37109aad9d59b12b91dbdf66068f9740f69570d40c85290bdebf291b108e8b1daa26669e90af748bffa52d45
7
- data.tar.gz: 5489bccc470ae3d9870cc7887f41bc43887159c1666a093cb4273709f58afcf83ada19dacf74fd74edad918fb2269e131bb1b3e2c6f757af7fc3ad8e92b53837
6
+ metadata.gz: 34d0f608b91d1f2269bc043b57e9969dd5f40dcc3b6ce332fbb2de1131217f1c9bc97e042c6f0f3103996e14eaa7b7b2dfa4e43e27f795ecde0f273590dd2374
7
+ data.tar.gz: a8f5a611bd5d6cec996fc5d8f956eda707f6c185204dadf918160faf4db620fec786edd8aec0e981e839483eeeaa41b6ff4cda3965e2c7db37a34b440d29be67
data/ext/zscan.c CHANGED
@@ -157,7 +157,10 @@ regex_t *rb_reg_prepare_re(VALUE re, VALUE str);
157
157
  static VALUE zscan_bmatch_p(VALUE self, VALUE pattern) {
158
158
  P;
159
159
  if (TYPE(pattern) == T_STRING) {
160
- // todo
160
+ volatile VALUE ss = rb_funcall(self, rb_intern("rest"), 0);
161
+ if (RTEST(rb_funcall(ss, rb_intern("start_with?"), 1, pattern))) {
162
+ return ULONG2NUM(RSTRING_LEN(pattern));
163
+ }
161
164
  } else if (TYPE(pattern) == T_REGEXP) {
162
165
  regex_t *re = rb_reg_prepare_re(pattern, p->s);
163
166
  int tmpreg = re != RREGEXP(pattern)->ptr;
data/lib/zscan.rb CHANGED
@@ -30,7 +30,7 @@ class ZScan
30
30
  end
31
31
 
32
32
  def rest
33
- _internal_string.byteslice bytepos
33
+ _internal_string.byteslice bytepos, _internal_string.bytesize
34
34
  end
35
35
 
36
36
  private :_internal_init, :_internal_string
@@ -38,10 +38,25 @@ end
38
38
 
39
39
  # coding: utf-8
40
40
  if __FILE__ == $PROGRAM_NAME
41
+ GC.stress = true
42
+ def assert a, b
43
+ raise "expected #{a.inspect} == #{b.inspect}" if a != b
44
+ end
41
45
  z = ZScan.new 'ab你好'
46
+ assert 2, z.bmatch?('ab')
47
+ z.pos = 4
48
+ assert 8, z.bytepos
42
49
  z.push_pos
43
- z.scan /ab你/
44
- p z.pos
45
- p z.bytepos
50
+ assert nil, z.scan(/ab你/)
51
+ z.pos = 0
52
+ assert 'ab你', z.scan(/ab你/)
53
+ assert 3, z.pos
54
+ assert 5, z.bytepos
46
55
  z.pop_pos
56
+ assert 4, z.pos
57
+ assert 8, z.bytepos
58
+ z.bytepos = 2
59
+ assert '你', z.scan('你')
60
+ assert '好', z.rest
61
+ z = nil
47
62
  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.1"
3
+ s.version = "0.2"
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.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zete Lui