use strict;
use warnings FATAL => 'all';
+use base qw(HTML::Zoom::SubObject);
use Carp qw(confess);
my $sel_char = '-\w_';
/\G\*/gc and
return sub { 1 };
+ # 'el[attr="foo"]
+
+ /\G$sel_re\[$sel_re="$sel_re"\]/gc and
+ return do {
+ my $name = $1;
+ my $attr = $2;
+ my $val = $3;
+ sub {
+ $_[0]->{name} && $_[0]->{name} eq $name and
+ $_[0]->{attrs}{$attr} && $_[0]->{attrs}{$attr} eq $val
+ }
+ };
+
# 'element' - match on tag name
/\G$sel_re/gc and
my @cl = split(/\./, $cls);
sub {
$_[0]->{attrs}{class}
- && !grep $_[0]->{attrs}{class} !~ /\b$_\b/, @cl
+ && !grep $_[0]->{attrs}{class} !~ /(^|\s+)$_($|\s+)/, @cl
+ }
+ };
+
+ # 'el.class1' - element + class
+
+ /\G$sel_re\.$sel_re/gc and
+ return do {
+ my $cls = $1;
+ my $name = $2;
+ sub {
+ $_[0]->{name} && $_[0]->{name} eq $name and
+ $_[0]->{attrs}{class} && $_[0]->{attrs}{class} eq $cls
+ }
+ };
+
+ # 'el#id' - element + id
+
+ /\G$sel_re#$sel_re/gc and
+ return do {
+ my $id = $1;
+ my $name = $2;
+ sub {
+ $_[0]->{name} && $_[0]->{name} eq $name and
+ $_[0]->{attrs}{id} && $_[0]->{attrs}{id} eq $id
}
};
PARSE: { do {
push(@sub, $self->_raw_parse_simple_selector($_));
last PARSE if (pos == length);
- /\G\s*,\s*/gc or confess "Selectors not comma separated";
+ #/\G\s*,\s*/gc or confess "Selectors not comma separated";
} until (pos == length) };
return $sub[0] if (@sub == 1);
return sub {
}
};
}
-}
-
+}
+
1;