strscan 3.0.4 → 3.0.5

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/ext/strscan/strscan.c +51 -1
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac97143ad3475bb22b506c3841a206ce2c6ef70a44330ba05be5e72a6bf183f2
4
- data.tar.gz: f66c4ed0b225115748bff2a26352f7bfad39f333be8219b8b84a0b9b5af831d6
3
+ metadata.gz: 5fe8ee5b0a51823c49758ecd996c0fa9217d604d9c660604e5fa3effb5278ec0
4
+ data.tar.gz: f86c26d87e5d20e166510bec395ab80c0a88bd4196caad32a54d8f5dbf3454a7
5
5
  SHA512:
6
- metadata.gz: 7f6b0e1faf495ba2e3b8d9f82ba40964eaad9f730477a5253d3fe8890fb75e1756c38d1187fae3e0dd88c71bfed728cd6bd7c7174606b1e004d35f3cefa9dfcd
7
- data.tar.gz: 5dba60f70b968815b342be3537aec8220176cd49c0a752a12b7e8c3085ed6f17af82052a35557398fb7f259ade8a42bdd1beedb1f35247f59292b3cb7d9cbce2
6
+ metadata.gz: a285597a6003600b406da55681439a6c2f49e433f48a30a562bbdf61834ba9e3496c8fc4919a80cda38cb17801cf7d0567b0e368b01df2b09b2a529af9f51a98
7
+ data.tar.gz: c034d307b742a613ce3762fe1ef1481ea063741dfd747d1294c6f11401381a0981a8fdc967211b118ea28f737769e67626dc5772d486a174f808a66c447a4836
@@ -22,7 +22,7 @@ extern size_t onig_region_memsize(const struct re_registers *regs);
22
22
 
23
23
  #include <stdbool.h>
24
24
 
25
- #define STRSCAN_VERSION "3.0.4"
25
+ #define STRSCAN_VERSION "3.0.5"
26
26
 
27
27
  /* =======================================================================
28
28
  Data Type Definitions
@@ -1458,6 +1458,54 @@ strscan_fixed_anchor_p(VALUE self)
1458
1458
  return p->fixed_anchor_p ? Qtrue : Qfalse;
1459
1459
  }
1460
1460
 
1461
+ typedef struct {
1462
+ VALUE self;
1463
+ VALUE captures;
1464
+ } named_captures_data;
1465
+
1466
+ static int
1467
+ named_captures_iter(const OnigUChar *name,
1468
+ const OnigUChar *name_end,
1469
+ int back_num,
1470
+ int *back_refs,
1471
+ OnigRegex regex,
1472
+ void *arg)
1473
+ {
1474
+ named_captures_data *data = arg;
1475
+
1476
+ VALUE key = rb_str_new((const char *)name, name_end - name);
1477
+ VALUE value = RUBY_Qnil;
1478
+ int i;
1479
+ for (i = 0; i < back_num; i++) {
1480
+ value = strscan_aref(data->self, INT2NUM(back_refs[i]));
1481
+ }
1482
+ rb_hash_aset(data->captures, key, value);
1483
+ return 0;
1484
+ }
1485
+
1486
+ /*
1487
+ * call-seq:
1488
+ * scanner.named_captures -> hash
1489
+ *
1490
+ * Returns a hash of string variables matching the regular expression.
1491
+ *
1492
+ * scan = StringScanner.new('foobarbaz')
1493
+ * scan.match?(/(?<f>foo)(?<r>bar)(?<z>baz)/)
1494
+ * scan.named_captures # -> {"f"=>"foo", "r"=>"bar", "z"=>"baz"}
1495
+ */
1496
+ static VALUE
1497
+ strscan_named_captures(VALUE self)
1498
+ {
1499
+ struct strscanner *p;
1500
+ GET_SCANNER(self, p);
1501
+ named_captures_data data;
1502
+ data.self = self;
1503
+ data.captures = rb_hash_new();
1504
+ onig_foreach_name(RREGEXP_PTR(p->regex), named_captures_iter, &data);
1505
+
1506
+ return data.captures;
1507
+ }
1508
+
1461
1509
  /* =======================================================================
1462
1510
  Ruby Interface
1463
1511
  ======================================================================= */
@@ -1652,4 +1700,6 @@ Init_strscan(void)
1652
1700
  rb_define_method(StringScanner, "inspect", strscan_inspect, 0);
1653
1701
 
1654
1702
  rb_define_method(StringScanner, "fixed_anchor?", strscan_fixed_anchor_p, 0);
1703
+
1704
+ rb_define_method(StringScanner, "named_captures", strscan_named_captures, 0);
1655
1705
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strscan
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Minero Aoki
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-07-23 00:00:00.000000000 Z
13
+ date: 2022-12-08 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Provides lexical scanning operations on a String.
16
16
  email:
@@ -46,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  requirements: []
49
- rubygems_version: 3.3.7
49
+ rubygems_version: 3.3.26
50
50
  signing_key:
51
51
  specification_version: 4
52
52
  summary: Provides lexical scanning operations on a String.