<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/nokogiri/css.rb</filename>
    </added>
    <added>
      <filename>lib/nokogiri/css/node.rb</filename>
    </added>
    <added>
      <filename>lib/nokogiri/css/parser.rb</filename>
    </added>
    <added>
      <filename>lib/nokogiri/css/tokenizer.rb</filename>
    </added>
    <added>
      <filename>lib/nokogiri/css/xpath_visitor.rb</filename>
    </added>
    <added>
      <filename>test/css/test_parser.rb</filename>
    </added>
    <added>
      <filename>test/css/test_tokenizer.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -3,7 +3,7 @@ require 'nokogiri/xml'
 require 'nokogiri/xslt'
 require 'nokogiri/html'
 require 'nokogiri/decorators'
-require 'nokogiri/xml/builder'
+require 'nokogiri/css'
 require 'nokogiri/html/builder'
 require 'nokogiri/hpricot'
 require 'nokogiri/native'</diff>
      <filename>lib/nokogiri.rb</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@ token IMPORTANT_SYM IMPORT_SYM MEDIA_SYM PAGE_SYM CHARSET_SYM DIMENSION
 
 rule
   selector
-    : simple_selector_1toN { result = val.flatten }
+    : simple_selector_1toN { result = val.flatten.first }
     ;
   combinator
     : PLUS s_0toN { result = :SAC_DIRECT_ADJACENT_SELECTOR }
@@ -27,15 +27,7 @@ rule
     ;
   simple_selector_1toN
     : simple_selector combinator simple_selector_1toN {
-        result =
-          case val[1]
-          when :SAC_DIRECT_ADJACENT_SELECTOR
-            SiblingSelector.new(val.first, val[2])
-          when :SAC_DESCENDANT_SELECTOR
-            DescendantSelector.new(val.first, val[2])
-          when :SAC_CHILD_SELECTOR
-            ChildSelector.new(val.first, val[2])
-          end
+        result = Node.new(val[1], [val.first, val.last])
       }
     | simple_selector
     ;
@@ -43,7 +35,7 @@ rule
     : '.' IDENT { result = ClassCondition.new(val[1]) }
     ;
   element_name
-    : IDENT { result = ElementSelector.new(val.first) }
+    : IDENT { result = Node.new(:ELEMENT_NAME, val) }
     | '*' { result = SimpleSelector.new() }
     ;
   attrib
@@ -105,9 +97,4 @@ rule
 end
 
 ---- header
-  require &quot;css/sac/conditions&quot;
-  require &quot;css/sac/selectors&quot;
 
----- inner
-  include CSS::SAC::Conditions
-  include CSS::SAC::Selectors</diff>
      <filename>lib/nokogiri/css/parser.y</filename>
    </modified>
    <modified>
      <diff>@@ -1,15 +1,15 @@
 module Nokogiri
 module CSS
-class Tokenizer
+class GeneratedTokenizer
 
 macro
   nl        \n|\r\n|\r|\f
   w         [\s\r\n\f]*
   nonascii  [^\\\\0-\\\\177]
   num       [0-9]+|[0-9]*\.[0-9]+
-  unicode   \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+  unicode   \\\\\\\\\[0-9a-f]{1,6}(\r\n|[\s\n\r\t\f])?
 
-  escape    {unicode}|\\[^\n\r\f0-9a-f]
+  escape    {unicode}|\\\\\\\[^\n\r\f0-9a-f]
   nmchar    [_a-z0-9-]|{nonascii}|{escape}
   nmstart   [_a-z]|{nonascii}|{escape}
   ident     [-]?{nmstart}{nmchar}*
@@ -26,15 +26,12 @@ rule
 
 # [:state]  pattern  [actions]
 
-            [ \t\r\n\f]+     { [:S, text] }
-  
             ~=               { [:INCLUDES, text] }
             \|=              { [:DASHMATCH, text] }
             ^=               { [:PREFIXMATCH, text] }
             \$=              { [:SUFFIXMATCH, text] }
             \*=              { [:SUBSTRINGMATCH, text] }
             {ident}          { [:IDENT, text] }
-            {string}         { [:STRING, text] }
             {ident}\(        { [:FUNCTION, text] }
             {num}            { [:NUMBER, text] }
             #{name}          { [:HASH, text] }
@@ -44,18 +41,17 @@ rule
             {w}~             { [:TILDE, text] }
             \:not\(          { [:NOT, text] }
             @{ident}         { [:ATKEYWORD, text] }
-            {invalid}        { [:INVALID, text] }
             {num}%           { [:PERCENTAGE, text] }
             {num}{ident}     { [:DIMENSION, text] }
             &lt;!--             { [:CDO, text] }
             --&gt;              { [:CDC, text] }
             
-            url\({w}{string}{w}\)                           { [:URI, text] }
-            url\({w}([!#$%&amp;*-~]|{nonascii}|{escape})*{w}\)  { [:URI, text] }
-            U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})?                {[:UNICODE_RANGE, text] }
+            U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})?  {[:UNICODE_RANGE, text] }
             
             {Comment}                    /* ignore comments */
-            
+            [\s\t\r\n\f]+    { [:S, text] }
+            {string}         { [:STRING, text] }
+            {invalid}        { [:INVALID, text] }
             .                { [text, text] }
 end
 end</diff>
      <filename>lib/nokogiri/css/tokenizer.rex</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,7 @@ require 'nokogiri/xml/document'
 require 'nokogiri/xml/node_set'
 require 'nokogiri/xml/text_node'
 require 'nokogiri/xml/xpath'
+require 'nokogiri/xml/builder'
 
 module Nokogiri
   module XML</diff>
      <filename>lib/nokogiri/xml.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9246422c850b9e580eead224fd17ed5ff5564878</id>
    </parent>
  </parents>
  <author>
    <name>Aaron Patterson</name>
    <email>aaron.patterson@gmail.com</email>
  </author>
  <url>http://github.com/tenderlove/nokogiri/commit/38d3bfbd8e2a1aee78b3386291e5f5f9b6c7dfd9</url>
  <id>38d3bfbd8e2a1aee78b3386291e5f5f9b6c7dfd9</id>
  <committed-date>2008-09-17T13:39:40-07:00</committed-date>
  <authored-date>2008-09-17T13:39:40-07:00</authored-date>
  <message>starting the css selector ast</message>
  <tree>5e02613474582265f249262d0aa6223463c74e3a</tree>
  <committer>
    <name>Aaron Patterson</name>
    <email>aaron.patterson@gmail.com</email>
  </committer>
</commit>
