diff --git a/lib/oga/parser.y b/lib/oga/parser.y index d844f1c..6c86e5c 100644 --- a/lib/oga/parser.y +++ b/lib/oga/parser.y @@ -77,18 +77,16 @@ rule element : element_open attributes element_body T_ELEM_CLOSE { - namespace, name = val[0] - - s(name, namespace, val[1], val[2]) + s(:element, val[0], val[1], val[2]) } ; element_open #

- : T_ELEM_OPEN T_ELEM_NAME { [nil, val[1].to_sym] } + : T_ELEM_OPEN T_ELEM_NAME { [nil, val[1]] } # - | T_ELEM_OPEN T_ELEM_NS T_ELEM_NAME { [val[1], val[2].to_sym] } + | T_ELEM_OPEN T_ELEM_NS T_ELEM_NAME { [val[1], val[2]] } ; elements diff --git a/spec/oga/parser/documents_spec.rb b/spec/oga/parser/documents_spec.rb index c289e4d..204f8d7 100644 --- a/spec/oga/parser/documents_spec.rb +++ b/spec/oga/parser/documents_spec.rb @@ -20,24 +20,27 @@ describe Oga::Parser do # s( - :html, + :element, nil, + 'html', nil, s(:text, "\n"), # s( - :head, + :element, nil, + 'head', nil, s(:text, "\n"), # s( - :title, + :element, nil, + 'title', nil, s(:text, 'Title') ), @@ -47,7 +50,7 @@ describe Oga::Parser do # <body> s(:text, "\n"), - s(:body, nil, nil, nil), + s(:element, nil, 'body', nil, nil), s(:text, "\n") ), s(:text, "\n") diff --git a/spec/oga/parser/elements_spec.rb b/spec/oga/parser/elements_spec.rb index 69156fd..9b71b5d 100644 --- a/spec/oga/parser/elements_spec.rb +++ b/spec/oga/parser/elements_spec.rb @@ -3,27 +3,30 @@ require 'spec_helper' describe Oga::Parser do context 'elements' do example 'parse an empty element' do - parse('<p></p>').should == s(:document, s(:p, nil, nil, nil)) + parse('<p></p>').should == s( + :document, + s(:element, nil, 'p', nil, nil) + ) end example 'parse an element with text' do parse('<p>foo</p>').should == s( :document, - s(:p, nil, nil, s(:text, 'foo')) + s(:element, nil, 'p', nil, s(:text, 'foo')) ) end example 'parse an element with a single attribute' do parse('<p foo></p>').should == s( :document, - s(:p, nil, s(:attributes, s(:attribute, 'foo')), nil) + s(:element, nil, 'p', s(:attributes, s(:attribute, 'foo')), nil) ) end example 'parse an element with a single attribute with a value' do parse('<p foo="bar"></p>').should == s( :document, - s(:p, nil, s(:attributes, s(:attribute, 'foo', 'bar')), nil) + s(:element, nil, 'p', s(:attributes, s(:attribute, 'foo', 'bar')), nil) ) end @@ -31,8 +34,9 @@ describe Oga::Parser do parse('<p foo="bar" baz="bad"></p>').should == s( :document, s( - :p, + :element, nil, + 'p', s( :attributes, s(:attribute, 'foo', 'bar'), @@ -47,8 +51,9 @@ describe Oga::Parser do parse('<p class="foo">Bar</p>').should == s( :document, s( - :p, + :element, nil, + 'p', s(:attributes, s(:attribute, 'class', 'foo')), s(:text, 'Bar') ) @@ -58,7 +63,7 @@ describe Oga::Parser do example 'parse an element with a namespace' do parse('<foo:p></p>').should == s( :document, - s(:p, 'foo', nil, nil) + s(:element, 'foo', 'p', nil, nil) ) end @@ -66,8 +71,9 @@ describe Oga::Parser do parse('<foo:p class="bar"></p>').should == s( :document, s( - :p, + :element, 'foo', + 'p', s(:attributes, s(:attribute, 'class', 'bar')), nil ) @@ -77,7 +83,7 @@ describe Oga::Parser do example 'parse an element nested inside another element' do parse('<p><a></a></p>').should == s( :document, - s(:p, nil, nil, s(:a, nil, nil, nil)) + s(:element, nil, 'p', nil, s(:element, nil, 'a', nil, nil)) ) end @@ -85,11 +91,12 @@ describe Oga::Parser do parse('<p>Foo<a>Bar</a></p>').should == s( :document, s( - :p, + :element, nil, + 'p', nil, s(:text, 'Foo'), - s(:a, nil, nil, s(:text, 'Bar')) + s(:element, nil, 'a', nil, s(:text, 'Bar')) ) ) end @@ -98,11 +105,12 @@ describe Oga::Parser do parse('<p>Foo<a>Bar</a>Baz</p>').should == s( :document, s( - :p, + :element, nil, + 'p', nil, s(:text, 'Foo'), - s(:a, nil, nil, s(:text, 'Bar')), + s(:element, nil, 'a', nil, s(:text, 'Bar')), s(:text, 'Baz') ) ) @@ -112,10 +120,11 @@ describe Oga::Parser do parse('<p><a>Bar</a>Baz</p>').should == s( :document, s( - :p, + :element, nil, + 'p', nil, - s(:a, nil, nil, s(:text, 'Bar')), + s(:element, nil, 'a', nil, s(:text, 'Bar')), s(:text, 'Baz') ) ) @@ -125,12 +134,13 @@ describe Oga::Parser do parse('<p><a>Bar</a>Baz<span>Da</span></p>').should == s( :document, s( - :p, + :element, nil, + 'p', nil, - s(:a, nil, nil, s(:text, 'Bar')), + s(:element, nil, 'a', nil, s(:text, 'Bar')), s(:text, 'Baz'), - s(:span, nil, nil, s(:text, 'Da')) + s(:element, nil, 'span', nil, s(:text, 'Da')) ) ) end diff --git a/spec/oga/parser/html_void_elements_spec.rb b/spec/oga/parser/html_void_elements_spec.rb index 3b98e2d..74d135e 100644 --- a/spec/oga/parser/html_void_elements_spec.rb +++ b/spec/oga/parser/html_void_elements_spec.rb @@ -5,14 +5,14 @@ describe Oga::Parser do example 'parse a void element that omits the closing /' do parse('<link>', :html => true).should == s( :document, - s(:link, nil, nil, nil) + s(:element, nil, 'link', nil, nil) ) end example 'parse a void element inside another element' do parse('<head><link></head>', :html => true).should == s( :document, - s(:head, nil, nil, s(:link, nil, nil, nil)) + s(:element, nil, 'head', nil, s(:element, nil, 'link', nil, nil)) ) end @@ -20,12 +20,14 @@ describe Oga::Parser do parse('<head><link href="foo.css"></head>', :html => true).should == s( :document, s( - :head, + :element, nil, + 'head', nil, s( - :link, + :element, nil, + 'link', s(:attributes, s(:attribute, 'href', 'foo.css')), nil ) @@ -37,11 +39,24 @@ describe Oga::Parser do parse('<head><link><title>Foo', :html => true).should == s( :document, s( - :head, + :element, nil, + 'head', nil, - s(:link, nil, nil, nil), - s(:title, nil, nil, s(:text, 'Foo')) + s( + :element, + nil, + 'link', + nil, + nil + ), + s( + :element, + nil, + 'title', + nil, + s(:text, 'Foo') + ) ) ) end