def initialize(stag, children=nil, etag=nil)
unless stag.class == STag
raise TypeError, "HTree::STag expected: #{stag.inspect}"
end
unless !children || children.all? {|c| c.kind_of?(HTree::Node) and !c.kind_of?(HTree::Doc) }
unacceptable = children.reject {|c| c.kind_of?(HTree::Node) and !c.kind_of?(HTree::Doc) }
unacceptable = unacceptable.map {|uc| uc.inspect }.join(', ')
raise TypeError, "Unacceptable element child: #{unacceptable}"
end
unless !etag || etag.class == ETag
raise TypeError, "HTree::ETag expected: #{etag.inspect}"
end
@stag = stag
@children = (children ? children.dup : []).freeze
@empty = children == nil && etag == nil
@etag = etag
end