strscan 3.0.6 → 3.0.7
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.
- checksums.yaml +4 -4
- data/ext/strscan/extconf.rb +1 -0
- data/ext/strscan/strscan.c +72 -41
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 966671b1cf9f378e37f9294dd7274648172ca82bfed40b3507d7776d53e3f948
|
4
|
+
data.tar.gz: 91d0a754b9365f048dd3abcb8f4d3faf20b7c747fe27c0989531266f5610982f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa2d55b49aad4e56dad583ec5c5b1fdc6ad0278c16ecfd2d730dd3ad198fd7b1ea112d625e647147cacf6dae1a670b34f4037a7552cc519f856e081975286d99
|
7
|
+
data.tar.gz: 5282025fe064fc0088721ce5d0b701f6145e483e5f1d26837a2c710a5da54f5415e669fd0081d00ea84f790362ed14453f487662f25b8e29616d51f0f6b1eb75
|
data/ext/strscan/extconf.rb
CHANGED
data/ext/strscan/strscan.c
CHANGED
@@ -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.
|
25
|
+
#define STRSCAN_VERSION "3.0.7"
|
26
26
|
|
27
27
|
/* =======================================================================
|
28
28
|
Data Type Definitions
|
@@ -539,6 +539,68 @@ adjust_register_position(struct strscanner *p, long position)
|
|
539
539
|
}
|
540
540
|
}
|
541
541
|
|
542
|
+
/* rb_reg_onig_match is available in Ruby 3.3 and later. */
|
543
|
+
#ifndef HAVE_RB_REG_ONIG_MATCH
|
544
|
+
static OnigPosition
|
545
|
+
rb_reg_onig_match(VALUE re, VALUE str,
|
546
|
+
OnigPosition (*match)(regex_t *reg, VALUE str, struct re_registers *regs, void *args),
|
547
|
+
void *args, struct re_registers *regs)
|
548
|
+
{
|
549
|
+
regex_t *reg = rb_reg_prepare_re(re, str);
|
550
|
+
|
551
|
+
bool tmpreg = reg != RREGEXP_PTR(re);
|
552
|
+
if (!tmpreg) RREGEXP(re)->usecnt++;
|
553
|
+
|
554
|
+
OnigPosition result = match(reg, str, regs, args);
|
555
|
+
|
556
|
+
if (!tmpreg) RREGEXP(re)->usecnt--;
|
557
|
+
if (tmpreg) {
|
558
|
+
if (RREGEXP(re)->usecnt) {
|
559
|
+
onig_free(reg);
|
560
|
+
}
|
561
|
+
else {
|
562
|
+
onig_free(RREGEXP_PTR(re));
|
563
|
+
RREGEXP_PTR(re) = reg;
|
564
|
+
}
|
565
|
+
}
|
566
|
+
|
567
|
+
if (result < 0) {
|
568
|
+
if (result != ONIG_MISMATCH) {
|
569
|
+
rb_raise(ScanError, "regexp buffer overflow");
|
570
|
+
}
|
571
|
+
}
|
572
|
+
|
573
|
+
return result;
|
574
|
+
}
|
575
|
+
#endif
|
576
|
+
|
577
|
+
static OnigPosition
|
578
|
+
strscan_match(regex_t *reg, VALUE str, struct re_registers *regs, void *args_ptr)
|
579
|
+
{
|
580
|
+
struct strscanner *p = (struct strscanner *)args_ptr;
|
581
|
+
|
582
|
+
return onig_match(reg,
|
583
|
+
match_target(p),
|
584
|
+
(UChar* )(CURPTR(p) + S_RESTLEN(p)),
|
585
|
+
(UChar* )CURPTR(p),
|
586
|
+
regs,
|
587
|
+
ONIG_OPTION_NONE);
|
588
|
+
}
|
589
|
+
|
590
|
+
static OnigPosition
|
591
|
+
strscan_search(regex_t *reg, VALUE str, struct re_registers *regs, void *args_ptr)
|
592
|
+
{
|
593
|
+
struct strscanner *p = (struct strscanner *)args_ptr;
|
594
|
+
|
595
|
+
return onig_search(reg,
|
596
|
+
match_target(p),
|
597
|
+
(UChar *)(CURPTR(p) + S_RESTLEN(p)),
|
598
|
+
(UChar *)CURPTR(p),
|
599
|
+
(UChar *)(CURPTR(p) + S_RESTLEN(p)),
|
600
|
+
regs,
|
601
|
+
ONIG_OPTION_NONE);
|
602
|
+
}
|
603
|
+
|
542
604
|
static VALUE
|
543
605
|
strscan_do_scan(VALUE self, VALUE pattern, int succptr, int getstr, int headonly)
|
544
606
|
{
|
@@ -560,47 +622,14 @@ strscan_do_scan(VALUE self, VALUE pattern, int succptr, int getstr, int headonly
|
|
560
622
|
}
|
561
623
|
|
562
624
|
if (RB_TYPE_P(pattern, T_REGEXP)) {
|
563
|
-
regex_t *rb_reg_prepare_re(VALUE re, VALUE str);
|
564
|
-
regex_t *re;
|
565
|
-
long ret;
|
566
|
-
int tmpreg;
|
567
|
-
|
568
625
|
p->regex = pattern;
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
ret = onig_match(re,
|
575
|
-
match_target(p),
|
576
|
-
(UChar* )(CURPTR(p) + S_RESTLEN(p)),
|
577
|
-
(UChar* )CURPTR(p),
|
578
|
-
&(p->regs),
|
579
|
-
ONIG_OPTION_NONE);
|
580
|
-
}
|
581
|
-
else {
|
582
|
-
ret = onig_search(re,
|
583
|
-
match_target(p),
|
584
|
-
(UChar* )(CURPTR(p) + S_RESTLEN(p)),
|
585
|
-
(UChar* )CURPTR(p),
|
586
|
-
(UChar* )(CURPTR(p) + S_RESTLEN(p)),
|
587
|
-
&(p->regs),
|
588
|
-
ONIG_OPTION_NONE);
|
589
|
-
}
|
590
|
-
if (!tmpreg) RREGEXP(pattern)->usecnt--;
|
591
|
-
if (tmpreg) {
|
592
|
-
if (RREGEXP(pattern)->usecnt) {
|
593
|
-
onig_free(re);
|
594
|
-
}
|
595
|
-
else {
|
596
|
-
onig_free(RREGEXP_PTR(pattern));
|
597
|
-
RREGEXP_PTR(pattern) = re;
|
598
|
-
}
|
599
|
-
}
|
626
|
+
OnigPosition ret = rb_reg_onig_match(pattern,
|
627
|
+
p->str,
|
628
|
+
headonly ? strscan_match : strscan_search,
|
629
|
+
(void *)p,
|
630
|
+
&(p->regs));
|
600
631
|
|
601
|
-
if (ret ==
|
602
|
-
if (ret < 0) {
|
603
|
-
/* not matched */
|
632
|
+
if (ret == ONIG_MISMATCH) {
|
604
633
|
return Qnil;
|
605
634
|
}
|
606
635
|
}
|
@@ -1502,7 +1531,9 @@ strscan_named_captures(VALUE self)
|
|
1502
1531
|
named_captures_data data;
|
1503
1532
|
data.self = self;
|
1504
1533
|
data.captures = rb_hash_new();
|
1505
|
-
|
1534
|
+
if (!RB_NIL_P(p->regex)) {
|
1535
|
+
onig_foreach_name(RREGEXP_PTR(p->regex), named_captures_iter, &data);
|
1536
|
+
}
|
1506
1537
|
|
1507
1538
|
return data.captures;
|
1508
1539
|
}
|
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
|
+
version: 3.0.7
|
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: 2023-
|
13
|
+
date: 2023-10-11 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: Provides lexical scanning operations on a String.
|
16
16
|
email:
|