diff --git a/lib/oga.rb b/lib/oga.rb index f065fbc..2a433c3 100644 --- a/lib/oga.rb +++ b/lib/oga.rb @@ -1,5 +1,8 @@ require 'ast' require_relative 'oga/ast/node' + require_relative 'oga/xml/lexer' require_relative 'oga/xml/parser' + +require_relative 'oga/html/parser' diff --git a/lib/oga/html/parser.rb b/lib/oga/html/parser.rb new file mode 100644 index 0000000..bc12cc1 --- /dev/null +++ b/lib/oga/html/parser.rb @@ -0,0 +1,19 @@ +module Oga + module HTML + ## + # Low level AST parser for parsing HTML documents. See {Oga::XML::Parser} + # for more information. + # + class Parser < XML::Parser + ## + # @param [Hash] options + # @see Oga::XML::Parser#initialize + # + def initialize(options = {}) + options = options.merge(:html => true) + + super(options) + end + end # Parser + end # HTML +end # Oga diff --git a/spec/oga/html/parser/element_spec.rb b/spec/oga/html/parser/element_spec.rb new file mode 100644 index 0000000..2567273 --- /dev/null +++ b/spec/oga/html/parser/element_spec.rb @@ -0,0 +1,10 @@ +require 'spec_helper' + +describe Oga::HTML::Parser do + example 'parse an HTML void element' do + parse_html('').should == s( + :document, + s(:element, nil, 'meta', nil, nil) + ) + end +end diff --git a/spec/support/parsing.rb b/spec/support/parsing.rb index 37b32ac..c189acd 100644 --- a/spec/support/parsing.rb +++ b/spec/support/parsing.rb @@ -23,7 +23,7 @@ module Oga end ## - # Parses the given HTML and returns an AST. + # Parses the given XML and returns an AST. # # @param [String] input # @param [Hash] options @@ -32,5 +32,14 @@ module Oga def parse(input, options = {}) return Oga::XML::Parser.new(options).parse(input) end + + ## + # Parses the given HTML and returns an AST. + # + # @see #parse + # + def parse_html(input, options = {}) + return Oga::HTML::Parser.new(options).parse(input) + end end # ParsingHelpers end # Oga