Class: REXML::DocType
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
|
|
Inherits: |
REXML::Parent
|
Defined in: | lib/rexml/doctype.rb |
Overview
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.
Constant Summary
-
DEFAULT_ENTITIES =
# File 'lib/rexml/doctype.rb', line 19{ 'gt'=>EntityConst::GT, 'lt'=>EntityConst::LT, 'quot'=>EntityConst::QUOT, "apos"=>EntityConst::APOS }
-
PUBLIC =
# File 'lib/rexml/doctype.rb', line 18"PUBLIC"
-
START =
# File 'lib/rexml/doctype.rb', line 15"<!DOCTYPE"
-
STOP =
# File 'lib/rexml/doctype.rb', line 16">"
-
SYSTEM =
# File 'lib/rexml/doctype.rb', line 17"SYSTEM"
XMLTokens - Included
NAME, NAMECHAR, NAME_CHAR, NAME_START_CHAR, NAME_STR, NCNAME_STR, NMTOKEN, NMTOKENS, REFERENCE
Class Method Summary
-
.new(first, parent = nil) ⇒ DocType
constructor
Constructor.
Parent - Inherited
.new | Constructor. |
Child - Inherited
.new | Constructor. |
Instance Attribute Summary
-
#entities
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
-
#external_id
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
-
#name
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
-
#namespaces
readonly
name is the name of the doctype external_id is the referenced DTD, if given.
Parent - Inherited
Child - Inherited
#next_sibling | Alias for Node#next_sibling_node. |
#next_sibling= | Sets the next sibling of this child. |
#parent | The Parent of this object. |
#parent= | Sets the parent of this child to the supplied argument. |
#previous_sibling | Alias for Node#previous_sibling_node. |
#previous_sibling= | Sets the previous sibling of this child. |
Node - Included
Instance Method Summary
- #add(child)
- #attribute_of(element, attribute)
- #attributes_of(element)
- #clone
- #context
- #entity(name)
- #node_type
-
#notation(name)
Retrieves a named notation.
-
#notations
This method returns a list of notations that have been declared in the internal DTD subset.
-
#public
This method retrieves the public identifier identifying the document's DTD.
-
#system
This method retrieves the system identifier identifying the document's DTD.
-
#write(output, indent = 0, transitive = false, ie_hack = false)
- output
-
#strip_quotes(quoted_string)
private
Method contributed by Henrik Martensson.
Parent - Inherited
#<< | Alias for Parent#push. |
#[] | Fetches a child at a given index. |
#[]= | Set an index entry. |
#add, | |
#children | Alias for Parent#to_a. |
#deep_clone | Deeply clones this object. |
#delete, #delete_at, #delete_if, #each, | |
#each_child | Alias for Parent#each. |
#each_index, | |
#index | Fetches the index of a given child of this parent. |
#insert_after | Inserts an child after another child child2 will be inserted after child1 in the child list of the parent. |
#insert_before | Inserts an child before another child child2 will be inserted before child1 in the child list of the parent. |
#length | Alias for Parent#size. |
#push | Alias for Parent#add. |
#replace_child | Replaces one child with another, making sure the nodelist is correct Child). |
#size, #to_a, #unshift |
Child - Inherited
#bytes | This doesn't yet handle encodings. |
#document |
|
#remove | Removes this child from the parent. |
#replace_with | Replaces this object with another object. |
Node - Included
#each_recursive | Visit all subnodes of |
#find_first_recursive | Find (and return) first subnode (recursively) for which the block evaluates to true. |
#indent, | |
#index_in_parent | Returns the position that |
#next_sibling_node, #previous_sibling_node, | |
#to_s |
|
Constructor Details
.new(first, parent = nil) ⇒ DocType
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 '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 (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 28
attr_reader :name, :external_id, :entities, :namespaces
#external_id (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 28
attr_reader :name, :external_id, :entities, :namespaces
#name (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 28
attr_reader :name, :external_id, :entities, :namespaces
#namespaces (readonly)
name is the name of the doctype external_id is the referenced DTD, if given
# File 'lib/rexml/doctype.rb', line 28
attr_reader :name, :external_id, :entities, :namespaces
Instance Method Details
#add(child)
[ GitHub ]# 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)
[ GitHub ]# 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)
[ GitHub ]# 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
#clone
[ GitHub ]# File 'lib/rexml/doctype.rb', line 95
def clone DocType.new self end
#context
[ GitHub ]# File 'lib/rexml/doctype.rb', line 129
def context @parent.context end
#entity(name)
[ GitHub ]#node_type
[ GitHub ]# File 'lib/rexml/doctype.rb', line 71
def node_type :doctype end
#notation(name)
Retrieves a named notation. Only notations declared in the internal DTD subset can be retrieved.
Method contributed by Henrik Martensson
#notations
# File 'lib/rexml/doctype.rb', line 173
def notations children().select {|node| node.kind_of?(REXML::NotationDecl)} end
#public
This method retrieves the public identifier identifying the document's DTD.
Method contributed by Henrik Martensson
# File 'lib/rexml/doctype.rb', line 147
def public case @external_id when "SYSTEM" nil when "PUBLIC" strip_quotes(@long_name) end end
#strip_quotes(quoted_string) (private)
Method contributed by Henrik Martensson
# File 'lib/rexml/doctype.rb', line 190
def strip_quotes(quoted_string) quoted_string =~ /^[\'\"].*[\'\"]$/ ? quoted_string[1, quoted_string.length-2] : quoted_string end
#system
This method retrieves the system identifier identifying the document's DTD
Method contributed by Henrik Martensson
# 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)
- 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
# 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