class REXML::DocType
Represents an XML DOCTYPE declaration; that is, the contents of <!DOCTYPE … >. DOCTYPES can be used to declare the DTD of a document, as well as being used to declare entities used in the document.
Constants
- DEFAULT_ENTITIES
- PUBLIC
- START
- STOP
- SYSTEM
Attributes
name is the name of the doctype #external_id is the referenced DTD, if given
name is the name of the doctype #external_id is the referenced DTD, if given
name is the name of the doctype #external_id is the referenced DTD, if given
name is the name of the doctype #external_id is the referenced DTD, if given
Public Class Methods
Constructor
dt = DocType.new( 'foo', '-//I/Hate/External/IDs' ) # <!DOCTYPE foo '-//I/Hate/External/IDs'> dt = DocType.new( doctype_to_clone ) # Incomplete. Shallow clone of doctype
Note
that the constructor:
Doctype.new( Source.new( "<!DOCTYPE foo 'bar'>" ) )
is deprecated. Do not use it. It will probably disappear.
# File lib/rexml/doctype.rb, line 74 def initialize( first, parent=nil ) @entities = DEFAULT_ENTITIES @long_name = @uri = nil if first.kind_of? String super() @name = first @external_id = parent elsif first.kind_of? DocType super( parent ) @name = first.name @external_id = first.external_id @long_name = first.instance_variable_get(:@long_name) @uri = first.instance_variable_get(:@uri) elsif first.kind_of? Array super( parent ) @name = first[0] @external_id = first[1] @long_name = first[2] @uri = first[3] elsif first.kind_of? Source super( parent ) parser = Parsers::BaseParser.new( first ) event = parser.pull if event[0] == :start_doctype @name, @external_id, @long_name, @uri, = event[1..-1] end else super() end end
Public Instance Methods
# File lib/rexml/doctype.rb, line 174 def add child super(child) @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES @entities[ child.name ] = child if child.kind_of? Entity end
# File lib/rexml/doctype.rb, line 119 def attribute_of element, attribute att_decl = find do |child| child.kind_of? AttlistDecl and child.element_name == element and child.include? attribute end return nil unless att_decl att_decl[attribute] end
# File lib/rexml/doctype.rb, line 109 def attributes_of element rv = [] each do |child| child.each do |key,val| rv << Attribute.new(key,val) end if child.kind_of? AttlistDecl and child.element_name == element end rv end
# File lib/rexml/doctype.rb, line 129 def clone DocType.new self end
# File lib/rexml/doctype.rb, line 166 def context @parent.context end
# File lib/rexml/doctype.rb, line 170 def entity( name ) @entities[name].unnormalized if @entities[name] end
# File lib/rexml/doctype.rb, line 105 def node_type :doctype end
This method returns a list of notations that have been declared in the internal DTD subset. Notations in the external DTD subset are not listed.
Method contributed by Henrik Martensson
# File lib/rexml/doctype.rb, line 210 def notations children().select {|node| node.kind_of?(REXML::NotationDecl)} end
- output
-
Where to write the string
- indent
-
An integer. If -1, no indentation will be used; otherwise, the indentation will be this number of spaces, and children will be indented an additional amount.
- transitive
-
Ignored
- ie_hack
-
Ignored
# File lib/rexml/doctype.rb, line 143 def write( output, indent=0, transitive=false, ie_hack=false ) f = REXML::Formatters::Default.new indent( output, indent ) output << START output << ' ' output << @name if @external_id reference_writer = ReferenceWriter.new(@external_id, @long_name, @uri) reference_writer.write(output) end unless @children.empty? output << ' [' @children.each { |child| output << "\n" f.write( child, output ) } output << "\n]" end output << STOP end
Private Instance Methods
Method contributed by Henrik Martensson
# File lib/rexml/doctype.rb, line 227 def strip_quotes(quoted_string) quoted_string =~ /^[\'\"].*[\'\"]$/ ? quoted_string[1, quoted_string.length-2] : quoted_string end