E#id
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / SelectorParser.pm
index 7d3c6a5..c485da4 100644 (file)
@@ -2,6 +2,7 @@ package HTML::Zoom::SelectorParser;
 
 use strict;
 use warnings FATAL => 'all';
+use base qw(HTML::Zoom::SubObject);
 use Carp qw(confess);
 
 my $sel_char = '-\w_';
@@ -41,7 +42,31 @@ sub _raw_parse_simple_selector {
         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
         }
       };
 
@@ -68,7 +93,7 @@ sub parse_selector {
       }
     };
   }
-} 
-  
+}
+
 
 1;