| Class | REXML::DocType |
| In: |
lib/rexml/doctype.rb
|
| Parent: | Parent |
| START | = | "<!DOCTYPE" |
| 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
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 41
41: def initialize( first, parent=nil )
42: @entities = DEFAULT_ENTITIES
43: @long_name = @uri = nil
44: if first.kind_of? String
45: super()
46: @name = first
47: @external_id = parent
48: elsif first.kind_of? DocType
49: super( parent )
50: @name = first.name
51: @external_id = first.external_id
52: elsif first.kind_of? Array
53: super( parent )
54: @name = first[0]
55: @external_id = first[1]
56: @long_name = first[2]
57: @uri = first[3]
58: elsif first.kind_of? Source
59: super( parent )
60: parser = Parsers::BaseParser.new( first )
61: event = parser.pull
62: if event[0] == :start_doctype
63: @name, @external_id, @long_name, @uri, = event[1..-1]
64: end
65: else
66: super()
67: end
68: end
# File lib/rexml/doctype.rb, line 138
138: def add child
139: super(child)
140: @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES
141: @entities[ child.name ] = child if child.kind_of? Entity
142: end
# File lib/rexml/doctype.rb, line 84
84: def attribute_of element, attribute
85: att_decl = find do |child|
86: child.kind_of? AttlistDecl and
87: child.element_name == element and
88: child.include? attribute
89: end
90: return nil unless att_decl
91: att_decl[attribute]
92: end
# File lib/rexml/doctype.rb, line 74
74: def attributes_of element
75: rv = []
76: each do |child|
77: child.each do |key,val|
78: rv << Attribute.new(key,val)
79: end if child.kind_of? AttlistDecl and child.element_name == element
80: end
81: rv
82: end
# File lib/rexml/doctype.rb, line 134
134: def entity( name )
135: @entities[name].unnormalized if @entities[name]
136: end
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
# File lib/rexml/doctype.rb, line 174
174: def notations
175: children().select {|node| node.kind_of?(REXML::NotationDecl)}
176: end
This method retrieves the system identifier identifying the document‘s DTD
Method contributed by Henrik Martensson
# File lib/rexml/doctype.rb, line 160
160: def system
161: case @external_id
162: when "SYSTEM"
163: strip_quotes(@long_name)
164: when "PUBLIC"
165: @uri.kind_of?(String) ? strip_quotes(@uri) : nil
166: end
167: end
| 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 108
108: def write( output, indent=0, transitive=false, ie_hack=false )
109: f = REXML::Formatters::Default.new
110: indent( output, indent )
111: output << START
112: output << ' '
113: output << @name
114: output << " #@external_id" if @external_id
115: output << " #{@long_name.inspect}" if @long_name
116: output << " #{@uri.inspect}" if @uri
117: unless @children.empty?
118: next_indent = indent + 1
119: output << ' ['
120: child = nil # speed
121: @children.each { |child|
122: output << "\n"
123: f.write( child, output )
124: }
125: output << "\n]"
126: end
127: output << STOP
128: end