+ when (qr{[\d,;\s+-]+}) {
+ push @querydesc, "character codepoints $_";
+ for (map { split /[^\d-]/ } $_) {
+ my ($charnum, $range) = split /-/, $_;
+ push @chars, chr $_ for $charnum .. ($range // $charnum);
+ }
+ }
+ when (qr{[A-Z]}) {
+ push @querydesc, "unicode match $_";
+ eval {
+ my $match = qr/\A\p{$_}\z/;
+ push @chars, grep { m/$match/ } map { chr $_ }
+ 0..0xD7FF, 0xE000..0xFDCF, 0xFDF0..0xFFFD;
+ } or die "invalid unicode match: $_\n";