Class: REXML::DocType
- Includes:
- XMLTokens
- Defined in:
- lib/rexml/doctype.rb
Overview
Represents an XML DOCTYPE declaration; that is, the contents of . DOCTYPES can be used to declare the DTD of a document, as well as being used to declare entities used in the document.
Constant Summary collapse
- START =
"<!DOCTYPE"- STOP =
">"- SYSTEM =
"SYSTEM"- PUBLIC =
"PUBLIC"- DEFAULT_ENTITIES =
{ 'gt'=>EntityConst::GT, 'lt'=>EntityConst::LT, 'quot'=>EntityConst::QUOT, "apos"=>EntityConst::APOS }
Constants included from XMLTokens
XMLTokens::NAME, XMLTokens::NAMECHAR, XMLTokens::NAME_CHAR, XMLTokens::NAME_START_CHAR, XMLTokens::NAME_STR, XMLTokens::NCNAME_STR, XMLTokens::NMTOKEN, XMLTokens::NMTOKENS, XMLTokens::REFERENCE
Instance Attribute Summary collapse
-
#entities ⇒ Object
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
-
#external_id ⇒ Object
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
-
#name ⇒ Object
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
-
#namespaces ⇒ Object
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
Attributes inherited from Child
Instance Method Summary collapse
- #add(child) ⇒ Object
- #attribute_of(element, attribute) ⇒ Object
- #attributes_of(element) ⇒ Object
- #clone ⇒ Object
- #context ⇒ Object
- #entity(name) ⇒ Object
-
#initialize(first, parent = nil) ⇒ DocType
constructor
Constructor.
- #node_type ⇒ Object
-
#notation(name) ⇒ Object
Retrieves a named notation.
-
#notations ⇒ Object
This method returns a list of notations that have been declared in the internal DTD subset.
-
#public ⇒ Object
This method retrieves the public identifier identifying the document's DTD.
-
#system ⇒ Object
This method retrieves the system identifier identifying the document's DTD.
-
#write(output, indent = 0, transitive = false, ie_hack = false) ⇒ Object
- output
- Where to write the string indent
An integer.
Methods inherited from Parent
#[], #[]=, #deep_clone, #delete, #delete_at, #delete_if, #each, #each_index, #index, #insert_after, #insert_before, #parent?, #replace_child, #size, #to_a, #unshift
Methods inherited from Child
#bytes, #document, #next_sibling=, #previous_sibling=, #remove, #replace_with
Methods included from Node
#each_recursive, #find_first_recursive, #indent, #index_in_parent, #next_sibling_node, #parent?, #previous_sibling_node, #to_s
Constructor Details
#initialize(first, parent = nil) ⇒ DocType
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/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 |
Instance Attribute Details
#entities ⇒ Object (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
28 29 30 |
# File 'lib/rexml/doctype.rb', line 28 def entities @entities end |
#external_id ⇒ Object (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
28 29 30 |
# File 'lib/rexml/doctype.rb', line 28 def external_id @external_id end |
#name ⇒ Object (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
28 29 30 |
# File 'lib/rexml/doctype.rb', line 28 def name @name end |
#namespaces ⇒ Object (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
28 29 30 |
# File 'lib/rexml/doctype.rb', line 28 def namespaces @namespaces end |
Instance Method Details
#add(child) ⇒ Object
137 138 139 140 141 |
# File 'lib/rexml/doctype.rb', line 137 def add child super(child) @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES @entities[ child.name ] = child if child.kind_of? Entity end |
#attribute_of(element, attribute) ⇒ Object
85 86 87 88 89 90 91 92 93 |
# File 'lib/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 |
#attributes_of(element) ⇒ Object
75 76 77 78 79 80 81 82 83 |
# File 'lib/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 |
#context ⇒ Object
129 130 131 |
# File 'lib/rexml/doctype.rb', line 129 def context @parent.context end |
#entity(name) ⇒ Object
133 134 135 |
# File 'lib/rexml/doctype.rb', line 133 def entity( name ) @entities[name].unnormalized if @entities[name] end |
#node_type ⇒ Object
71 72 73 |
# File 'lib/rexml/doctype.rb', line 71 def node_type :doctype end |
#notation(name) ⇒ Object
Retrieves a named notation. Only notations declared in the internal DTD subset can be retrieved.
Method contributed by Henrik Martensson
181 182 183 184 185 |
# File 'lib/rexml/doctype.rb', line 181 def notation(name) notations.find { |notation_decl| notation_decl.name == name } end |
#notations ⇒ Object
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
173 174 175 |
# File 'lib/rexml/doctype.rb', line 173 def notations children().select {|node| node.kind_of?(REXML::NotationDecl)} end |
#public ⇒ Object
This method retrieves the public identifier identifying the document's DTD.
Method contributed by Henrik Martensson
147 148 149 150 151 152 153 154 |
# File 'lib/rexml/doctype.rb', line 147 def public case @external_id when "SYSTEM" nil when "PUBLIC" strip_quotes(@long_name) end end |
#system ⇒ Object
This method retrieves the system identifier identifying the document's DTD
Method contributed by Henrik Martensson
159 160 161 162 163 164 165 166 |
# File 'lib/rexml/doctype.rb', line 159 def system case @external_id when "SYSTEM" strip_quotes(@long_name) when "PUBLIC" @uri.kind_of?(String) ? strip_quotes(@uri) : nil end end |
#write(output, indent = 0, transitive = false, ie_hack = false) ⇒ Object
- 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
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rexml/doctype.rb', line 109 def write( output, indent=0, transitive=false, ie_hack=false ) f = REXML::Formatters::Default.new indent( output, indent ) output << START output << ' ' output << @name output << " #@external_id" if @external_id output << " #{@long_name.inspect}" if @long_name output << " #{@uri.inspect}" if @uri unless @children.empty? output << ' [' @children.each { |child| output << "\n" f.write( child, output ) } output << "\n]" end output << STOP end |