# REXML::DocType (Class)

In: | rexml/doctype.rb
Parent: | 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.

## Methods

add attribute_of attributes_of clone entity new node_type write

## Constants

START | = | "
STOP | = | ">"
SYSTEM | = | "SYSTEM"
PUBLIC | = | "PUBLIC"
DEFAULT_ENTITIES | = | { 'gt'=>EntityConst::GT, 'lt'=>EntityConst::LT, 'quot'=>EntityConst::QUOT, "apos"=>EntityConst::APOS

## Attributes

entities | [R] | name is the name of the doctype external_id is the referenced DTD, if given
external_id | [R] | name is the name of the doctype external_id is the referenced DTD, if given
name | [R] | name is the name of the doctype external_id is the referenced DTD, if given
namespaces | [R] | name is the name of the doctype external_id is the referenced DTD, if given

## Included Modules

XMLTokens

## Public Class methods

new( first, parent=nil )

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
         source = Source.new( '<!DOCTYPE foo "bar">' )
         dt = DocType.new( source )
         # <!DOCTYPE foo "bar">
         dt = DocType.new( source, some_document )
         # Creates a doctype, and adds to the supplied document

[Source]

    # File rexml/doctype.rb, line 40
                    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]
                            end
                    end

## Public Instance methods

node_type()

[Source]

    # File rexml/doctype.rb, line 60
                    def node_type
                            :doctype
                    end

attributes_of(element)

[Source]

    # File rexml/doctype.rb, line 64
                    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

attribute_of(element, attribute)

[Source]

    # File rexml/doctype.rb, line 74
                    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

clone()

[Source]

    # File rexml/doctype.rb, line 84
                    def clone
                            DocType.new self
                    end

write( output, indent=0, transitive=false, ie_hack=false )

output: | Where to write the string
indent: | An integer. If -1, no indenting will be used; otherwise, the indentation will be this number of spaces, and children will be indented an additional amount.
transitive: | Who knows?
ie_hack: | Internet Explorer is the worst piece of crap to have ever been written, with the possible exception of Windows itself. Since IE is unable to parse proper XML, we have to provide a hack to generate XML that IE’s limited abilities can handle. This hack inserts a space before the /> on empty tags.

[Source]

    # File rexml/doctype.rb, line 103
                    def write( output, indent=0, transitive=false, ie_hack=false )
                            indent( output, indent )
                            output << START
                            output << ' '
                            output << @name
                            output << " #@external_id" if @external_id
                            output << " #@long_name" if @long_name
                            output << " #@uri" if @uri
                            unless @children.empty?
                                    next_indent = indent + 2
                                    output << ' ['
                                    child = nil         # speed

                                    @children.each { |child|
                                            output << "\n"
                                            child.write( output, next_indent )
                                    }
                                    output << "\n"
                                    #output << '   '*next_indent

                                    output << "]"
                            end
                            output << STOP
                    end

entity( name )

[Source]

    # File rexml/doctype.rb, line 126
                    def entity( name )
                            @entities[name].unnormalized if @entities[name]
                    end

add(child)

[Source]

    # File rexml/doctype.rb, line 130
                    def add child
                            super(child)
                            @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES
                            @entities[ child.name ] = child if child.kind_of? Entity
                    end

[Validate]