my $sel_char = '-\w_';
my $sel_meta_char = q-!"#$%&'()*+,./:;<=>?@[\]^`{|}~-;
-my $sel_re = qr/((?:(?:\\[\Q$sel_meta_char\E])|[$sel_char])+)/;
-my $match_value_re = qr/"?$sel_re"?/;
+my $sel_item = qr/(?:(?:\\[\Q$sel_meta_char\E])|[$sel_char])/;
+my $sel_re = qr/($sel_item+)/;
+my $match_value_re = qr/"?($sel_item*)"?/;
sub new { bless({}, shift) }
my $attribute = $_[0]->_unescape($1);
my $value = $_[0]->_unescape($2);
sub {
- $_[0]->{attrs}{$attribute}
+ exists $_[0]->{attrs}{$attribute}
&& $_[0]->{attrs}{$attribute} =~ qr/^\Q$value\E/;
}
};
my $attribute = $_[0]->_unescape($1);
my $value = $_[0]->_unescape($2);
sub {
- $_[0]->{attrs}{$attribute}
+ exists $_[0]->{attrs}{$attribute}
&& $_[0]->{attrs}{$attribute} =~ qr/\Q$value\E$/;
}
};
my $attribute = $_[0]->_unescape($1);
my $value = $_[0]->_unescape($2);
sub {
- $_[0]->{attrs}{$attribute}
+ exists $_[0]->{attrs}{$attribute}
&& $_[0]->{attrs}{$attribute} =~ qr/\Q$value\E/;
}
};
my $attribute = $_[0]->_unescape($1);
my $value = $_[0]->_unescape($2);
sub {
- $_[0]->{attrs}{$attribute}
+ exists $_[0]->{attrs}{$attribute}
&& $_[0]->{attrs}{$attribute} =~ qr/\b\Q$value\E\b/;
}
};
my $attribute = $_[0]->_unescape($1);
my $value = $_[0]->_unescape($2);
sub {
- $_[0]->{attrs}{$attribute}
+ exists $_[0]->{attrs}{$attribute}
&& $_[0]->{attrs}{$attribute} =~ qr/^\Q$value\E(?:-|$)/;
}
};
my $attribute = $_[0]->_unescape($1);
my $value = $_[0]->_unescape($2);
sub {
- $_[0]->{attrs}{$attribute}
+ exists $_[0]->{attrs}{$attribute}
&& $_[0]->{attrs}{$attribute} eq $value;
}
};
my $attribute = $_[0]->_unescape($1);
my $value = $_[0]->_unescape($2);
sub {
- ! ($_[0]->{attrs}{$attribute}
+ ! (exists $_[0]->{attrs}{$attribute}
&& $_[0]->{attrs}{$attribute} eq $value);
}
};