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

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

[Source]

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

[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

[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

[Source]

# File rexml/doctype.rb, line 84
                def clone
                        DocType.new self
                end
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

[Source]

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

[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]