lib/hexp/node/domize.rb in hexp-0.2.0 vs lib/hexp/node/domize.rb in hexp-0.3.0
- old
+ new
@@ -7,33 +7,39 @@
}.freeze
# The resulting DOM Document
#
# @return [Nokogiri::HTML::Document]
- # @api private
#
+ # @api private
attr_reader :dom
# Instanitiate a Domizer
#
- # @param hexp [Hexp::Node]
- # @param options [Hash] :include_doctype defaults to true
- # @api private
+ # @param [Hexp::Node] hexp
#
+ # @param [Hash] options
+ # @options options [true,false] :include_doctype Defaults to true
+ #
+ # @api private
def initialize(hexp, options = {})
@dom = Hexp::DOM
@raw = hexp
@options = DEFAULT_OPTIONS.merge(options).freeze
end
# Turn the hexp into a DOM
#
# @return [Nokogiri::HTML::Document]
- # @api private
#
+ # @api private
def call
@doc = dom::Document.new
+ if @options[:html5]
+ @doc.children = dom::NodeSet.new(@doc, [])
+ @doc.create_internal_subset(nil, nil, nil)
+ end
@root = domize(@raw)
@doc << @root
if @options[:include_doctype]
@doc
@@ -44,40 +50,43 @@
private
# Turn a Hexp::Node into a Document
#
- # @param hexp [Hexp::Node]
+ # @param [Hexp::Node] hexp
+ #
# @return [Nokogiri::HTML::Document]
- # @api private
#
+ # @api private
def domize(hexp)
dom::Node.new(hexp.tag.to_s, @doc).tap do |node|
set_attributes(node, hexp.attributes)
set_children(node, hexp.children)
end
end
# Set attributes on a DOM node
#
- # @param node [Nokogiri::XML::Element]
- # @param attributes [Hash]
+ # @param [Nokogiri::XML::Element] node
+ # @param [Hash] attributes
+ #
# @return [void]
- # @api private
#
+ # @api private
def set_attributes(node, attributes)
attributes.each do |key,value|
node[key] = value
end
end
# Set children on the DOM node
#
- # @param node [Nokogiri::XML::Element]
- # @param children [Hexp::List]
+ # @param [Nokogiri::XML::Element] node
+ # @param [Hexp::List] children
+ #
# @return [void]
- # @api private
#
+ # @api private
def set_children(node, children)
children.each do |child|
if child.instance_of?(TextNode)
node << dom::Text.new(child, @doc)
else