Doctype inherits from Node
This makes it possible to parse documents where a doctype resides in a node, instead of being located at the root. Fixes #169
This commit is contained in:
parent
b13cfdfea5
commit
131fba7aed
|
@ -3,6 +3,15 @@
|
||||||
This document contains details of the various releases and their release dates.
|
This document contains details of the various releases and their release dates.
|
||||||
Dates are in the format `yyyy-mm-dd`.
|
Dates are in the format `yyyy-mm-dd`.
|
||||||
|
|
||||||
|
## 2.9 - 2017-02-10
|
||||||
|
|
||||||
|
### Doctypes are now Nodes
|
||||||
|
|
||||||
|
Each Doctype now inherits from `Oga::XML::Node`. This makes it possible to parse
|
||||||
|
documents where a doctype is located in a child node. However, in these cases
|
||||||
|
Oga will _not_ populate `Oga::XML::Document#doctype` as this can not be done in
|
||||||
|
an efficient way.
|
||||||
|
|
||||||
## 2.8 - 2017-01-04
|
## 2.8 - 2017-01-04
|
||||||
|
|
||||||
Ruby 2.4 deprecates Fixnum in favour of Integer, producing warnings whenever
|
Ruby 2.4 deprecates Fixnum in favour of Integer, producing warnings whenever
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
module Oga
|
module Oga
|
||||||
module XML
|
module XML
|
||||||
# Class used for storing information about Doctypes.
|
# Class used for storing information about Doctypes.
|
||||||
class Doctype
|
class Doctype < Node
|
||||||
include ToXML
|
|
||||||
|
|
||||||
# The name of the doctype (e.g. "HTML").
|
# The name of the doctype (e.g. "HTML").
|
||||||
# @return [String]
|
# @return [String]
|
||||||
attr_accessor :name
|
attr_accessor :name
|
||||||
|
|
|
@ -7,6 +7,11 @@ module Oga
|
||||||
include Traversal
|
include Traversal
|
||||||
include ToXML
|
include ToXML
|
||||||
|
|
||||||
|
# The doctype of the document.
|
||||||
|
#
|
||||||
|
# When parsing a document this attribute will be set automatically if a
|
||||||
|
# doctype resides at the root of the document.
|
||||||
|
#
|
||||||
# @return [Oga::XML::Doctype]
|
# @return [Oga::XML::Doctype]
|
||||||
attr_accessor :doctype
|
attr_accessor :doctype
|
||||||
|
|
||||||
|
|
|
@ -134,4 +134,25 @@ describe Oga::XML::Parser do
|
||||||
@document.doctype.inline_rules.should == 'rule1'
|
@document.doctype.inline_rules.should == 'rule1'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'doctypes inside an element' do
|
||||||
|
before :all do
|
||||||
|
@document = parse('<foo><!DOCTYPE html><bar /></foo>')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not set the doctype of the document' do
|
||||||
|
# This is because the doctype does not reside at the root. Supporting
|
||||||
|
# doctypes at arbitrary locations would come at a hefty performance
|
||||||
|
# impact, and requires doctypes to reach back into their owning documents
|
||||||
|
# (which leads to ugly code).
|
||||||
|
@document.doctype.should be_nil
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets the next node of the doctype' do
|
||||||
|
doctype = @document.children[0].children[0]
|
||||||
|
bar = @document.children[0].children[1]
|
||||||
|
|
||||||
|
doctype.next.should == bar
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue