Skip to content

Commit 27cbf0e

Browse files
committed
Add <ws> and <ident> builtins.
1 parent 527ad9c commit 27cbf0e

File tree

3 files changed

+53
-32
lines changed

3 files changed

+53
-32
lines changed

src/PAST/NQP.pir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ entry to produce the node to be returned.
387387
maphash['split'] = 'split__Pss'
388388
maphash['index'] = 'index__Issi'
389389
maphash['chr'] = 'chr__Si'
390-
maphash['ord'] = 'ord__Is'
390+
maphash['ord'] = 'ord__Isi'
391391
maphash['lc'] = 'downcase__Ss'
392392
maphash['uc'] = 'upcase__Ss'
393393
maphash['substr'] = 'substr__Ssii'

src/QRegex/Cursor.nqp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,27 @@ role QRegex::Cursor {
126126
$cur;
127127
}
128128

129+
method wb() {
130+
my $cur := self."!cursor_start"();
131+
$cur."!cursor_pass"($!pos, "wb")
132+
if $!pos == 0
133+
|| $!pos == nqp::chars($!target)
134+
|| nqp::iscclass(pir::const::CCLASS_WORD, $!target, $!pos-1)
135+
!= nqp::iscclass(pir::const::CCLASS_WORD, $!target, $!pos);
136+
$cur;
137+
}
138+
139+
method ident() {
140+
my $cur := self."!cursor_start"();
141+
$cur."!cursor_pass"(
142+
pir::find_not_cclass__Iisii(
143+
pir::const::CCLASS_WORD,
144+
$!target, $!pos, nqp::chars($!target)))
145+
if nqp::ord($!target, $!pos) == 95
146+
|| nqp::iscclass(pir::const::CCLASS_ALPHABETIC, $!target, $!pos);
147+
$cur;
148+
}
149+
129150
method alpha() {
130151
my $cur := self."!cursor_start"();
131152
$cur."!cursor_pass"($!pos+1)

t/qregex/rx_subrules

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## builtin subrules
22

3-
<ident> 2+3 ab2 /mob<ident>: <ab2 @ 4>/ capturing builtin <ident>
3+
<ident> 2+3 ab2 <mob<ident>: ab2 @ 4> capturing builtin <ident>
44
<.ident> 2+3 ab2 y non-capturing builtin <.ident>
55

66
<?wb>def abc\ndef\n-==\nghi y word boundary \W\w
@@ -16,36 +16,36 @@ ghi<!wb> abc\ndef\n-==\nghi n EOS nonword boundary
1616
a<!wb> abc\ndef\n-==\nghi y \w\w nonword boundary
1717
\-<!wb> abc\ndef\n-==\nghi y \W\W nonword boundary
1818

19-
<upper> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<upper>: <A @ 45>/ <upper>
20-
<+upper> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <A @ 45>/ <+upper>
21-
<+upper>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <ABCDEFGHIJ @ 45>/ <+upper>+
22-
<lower> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<lower>: <a @ 55>/ <lower>
23-
<+lower> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <a @ 55>/ <+lower>
24-
<+lower>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <abcdefghij @ 55>/ <+lower>+
25-
<alpha> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<alpha>: <_ @ 31>/ <alpha>
26-
<+alpha> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <_ @ 31>/ <+alpha>
27-
<+alpha>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <_ @ 31>/ <+alpha>+
28-
<digit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<digit>: <0 @ 35>/ <digit>
29-
<+digit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <0 @ 35>/ <+digit>
30-
<+digit>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <0123456789 @ 35>/ <+digit>+
31-
<xdigit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<xdigit>: <0 @ 35>/ <xdigit>
32-
<+xdigit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <0 @ 35>/ <+xdigit>
33-
<+xdigit>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <0123456789ABCDEF @ 35>/ <+xdigit>+
34-
<space> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<space>: <\t @ 0>/ <space>
35-
<+space> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <\t @ 0>/ <+space>
36-
<+space>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <\t\n\r @ 0>/ <+space>+
37-
<blank> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<blank>: <\t @ 0>/ <blank>
38-
<+blank> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <\t @ 0>/ <+blank>
39-
<+blank>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <\t @ 0>/ <+blank>+
40-
<cntrl> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<cntrl>: <\t @ 0>/ <cntrl>
41-
<+cntrl> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <\t @ 0>/ <+cntrl>
42-
<+cntrl>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <\t\n\r @ 0>/ <+cntrl>+
43-
<punct> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<punct>: <! @ 4>/ <punct>
44-
<+punct> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <! @ 4>/ <+punct>
45-
<+punct>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <!"#$%&/ <+punct>+
46-
<alnum> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob<alnum>: <0 @ 35>/ <alnum>
47-
<+alnum> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <0 @ 35>/ <+alnum>
48-
<+alnum>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij /mob: <0123456789ABCDEFGHIJabcdefghij @ 35>/ <+alnum>+
19+
<upper> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<upper>: A @ 45> <upper>
20+
<+upper> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: A @ 45> <+upper>
21+
<+upper>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: ABCDEFGHIJ @ 45> <+upper>+
22+
<lower> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<lower>: a @ 55> <lower>
23+
<+lower> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: a @ 55> <+lower>
24+
<+lower>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: abcdefghij @ 55> <+lower>+
25+
<alpha> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<alpha>: _ @ 31> <alpha>
26+
<+alpha> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: _ @ 31> <+alpha>
27+
<+alpha>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: _ @ 31> <+alpha>+
28+
<digit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<digit>: 0 @ 35> <digit>
29+
<+digit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: 0 @ 35> <+digit>
30+
<+digit>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: 0123456789 @ 35> <+digit>+
31+
<xdigit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<xdigit>: 0 @ 35> <xdigit>
32+
<+xdigit> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: 0 @ 35> <+xdigit>
33+
<+xdigit>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: 0123456789ABCDEF @ 35> <+xdigit>+
34+
<space> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<space>: \t @ 0> <space>
35+
<+space> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: \t @ 0> <+space>
36+
<+space>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: \t\n\r @ 0> <+space>+
37+
<blank> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<blank>: \t @ 0> <blank>
38+
<+blank> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: \t @ 0> <+blank>
39+
<+blank>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: \t @ 0> <+blank>+
40+
<cntrl> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<cntrl>: \t @ 0> <cntrl>
41+
<+cntrl> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: \t @ 0> <+cntrl>
42+
<+cntrl>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: \t\n\r @ 0> <+cntrl>+
43+
<punct> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<punct>: ! @ 4> <punct>
44+
<+punct> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: ! @ 4> <+punct>
45+
<+punct>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: !"#$%&/ <+punct>+
46+
<alnum> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob<alnum>: 0 @ 35> <alnum>
47+
<+alnum> \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: 0 @ 35> <+alnum>
48+
<+alnum>+ \t\n\r !"#$%&'()*+,-./:;<=>?@[\]^`_{|}0123456789ABCDEFGHIJabcdefghij <mob: 0123456789ABCDEFGHIJabcdefghij @ 35> <+alnum>+
4949
<+alnum+[_]> ident_1 y union of character classes
5050
<+[ab]+[\-]>+ aaa-bbb y enumerated character classes
5151
<+ [ a b ]+[\-]>+ aaa-bbb y whitespace is ignored within square brackets and after the initial +

0 commit comments

Comments
 (0)