Parent
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.
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 rexml/doctype.rb, line 42 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 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
# File rexml/doctype.rb, line 147 def add child super(child) @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES @entities[ child.name ] = child if child.kind_of? Entity end
# File rexml/doctype.rb, line 85 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 rexml/doctype.rb, line 75 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 rexml/doctype.rb, line 135 def context if @parent @parent.context else nil end end
# File rexml/doctype.rb, line 143 def entity( name ) @entities[name].unnormalized if @entities[name] end
Retrieves a named notation. Only notations declared in the internal DTD
subset can be retrieved.
Method contributed by Henrik Martensson
# File rexml/doctype.rb, line 191 def notation(name) notations.find { |notation_decl| notation_decl.name == name } end
This method retrieves the public identifier identifying the document's DTD
.
Method contributed by Henrik Martensson
# File rexml/doctype.rb, line 157 def public case @external_id when "SYSTEM" nil when "PUBLIC" strip_quotes(@long_name) end end
This method retrieves the system identifier identifying the document's DTD
Method contributed by Henrik Martensson
# File rexml/doctype.rb, line 169 def system case @external_id when "SYSTEM" strip_quotes(@long_name) when "PUBLIC" @uri.kind_of?(String) ? strip_quotes(@uri) : nil end end
Where to write the string
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.
Ignored
Ignored
# File rexml/doctype.rb, line 109 def write( output, indent=0, transitive=false, ie_hack=false ) f = REXML::Formatters::Default.new c = context if c and c[:prologue_quote] == :apostrophe quote = "'" else quote = "\"" end indent( output, indent ) output << START output << ' ' output << @name output << " #{@external_id}" if @external_id output << " #{quote}#{@long_name}#{quote}" if @long_name output << " #{quote}#{@uri}#{quote}" if @uri unless @children.empty? output << ' [' @children.each { |child| output << "\n" f.write( child, output ) } output << "\n]" end output << STOP end