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.
START | = | " |
STOP | = | ">" |
SYSTEM | = | "SYSTEM" |
PUBLIC | = | "PUBLIC" |
DEFAULT_ENTITIES | = | { 'gt'=>EntityConst::GT, 'lt'=>EntityConst::LT, 'quot'=>EntityConst::QUOT, "apos"=>EntityConst::APOS |
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 |
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
# 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
# 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
# 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
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. |
# 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
# File rexml/doctype.rb, line 126 def entity( name ) @entities[name].unnormalized if @entities[name] end