summaryrefslogtreecommitdiff
path: root/lib/rexml/xmldecl.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rexml/xmldecl.rb')
-rw-r--r--lib/rexml/xmldecl.rb72
1 files changed, 72 insertions, 0 deletions
diff --git a/lib/rexml/xmldecl.rb b/lib/rexml/xmldecl.rb
new file mode 100644
index 0000000000..6a6cc31a53
--- /dev/null
+++ b/lib/rexml/xmldecl.rb
@@ -0,0 +1,72 @@
+require 'rexml/encoding'
+require 'rexml/source'
+
+module REXML
+ # NEEDS DOCUMENTATION
+ class XMLDecl < Child
+ include Encoding
+
+ DEFAULT_VERSION = "1.0";
+ DEFAULT_ENCODING = "UTF-8";
+ DEFAULT_STANDALONE = "no";
+ START = '<\?xml';
+ STOP = '\?>';
+
+ attr_accessor :version, :standalone
+
+ def initialize(version=DEFAULT_VERSION, encoding=nil, standalone=nil)
+ @encoding_set = !encoding.nil?
+ if version.kind_of? XMLDecl
+ super()
+ @version = version.version
+ self.encoding = version.encoding
+ @standalone = version.standalone
+ else
+ super()
+ @version = version
+ self.encoding = encoding
+ @standalone = standalone
+ end
+ @version = DEFAULT_VERSION if @version.nil?
+ end
+
+ def clone
+ XMLDecl.new(self)
+ end
+
+ def write writer, indent=-1, transitive=false, ie_hack=false
+ indent( writer, indent )
+ writer << START.sub(/\\/u, '')
+ writer << " #{content}"
+ writer << STOP.sub(/\\/u, '')
+ end
+
+ def ==( other )
+ other.kind_of?(XMLDecl) and
+ other.version == @version and
+ other.encoding == self.encoding and
+ other.standalone == @standalone
+ end
+
+ def xmldecl version, encoding, standalone
+ @version = version
+ @encoding_set = !encoding.nil?
+ self.encoding = encoding
+ @standalone = standalone
+ end
+
+ def node_type
+ :xmldecl
+ end
+
+ alias :stand_alone? :standalone
+
+ private
+ def content
+ rv = "version='#@version'"
+ rv << " encoding='#{encoding}'" if @encoding_set
+ rv << " standalone='#@standalone'" if @standalone
+ rv
+ end
+ end
+end