mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	a String which means the name of the encoding. this partially revert r29646. * lib/rexml/document.rb: follow above. * lib/rexml/output.rb: ditto. * lib/rexml/parsers/baseparser.rb: ditto. * lib/rexml/source.rb: ditto. * lib/rexml/xmldecl.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			119 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
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
 | 
						|
    attr_reader :writeencoding, :writethis
 | 
						|
 | 
						|
    def initialize(version=DEFAULT_VERSION, encoding=nil, standalone=nil)
 | 
						|
      @writethis = true
 | 
						|
      @writeencoding = !encoding.nil?
 | 
						|
      if version.kind_of? XMLDecl
 | 
						|
        super()
 | 
						|
        @version = version.version
 | 
						|
        self.encoding = version.encoding
 | 
						|
        @writeencoding = version.writeencoding
 | 
						|
        @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
 | 
						|
 | 
						|
    # indent::
 | 
						|
    #   Ignored.  There must be no whitespace before an XML declaration
 | 
						|
    # transitive::
 | 
						|
    #   Ignored
 | 
						|
    # ie_hack::
 | 
						|
    #   Ignored
 | 
						|
    def write(writer, indent=-1, transitive=false, ie_hack=false)
 | 
						|
      return nil unless @writethis or writer.kind_of? Output
 | 
						|
      writer << START.sub(/\\/u, '')
 | 
						|
      if writer.kind_of? Output
 | 
						|
        writer << " #{content writer.encoding}"
 | 
						|
      else
 | 
						|
        writer << " #{content encoding}"
 | 
						|
      end
 | 
						|
      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
 | 
						|
      self.encoding = encoding
 | 
						|
      @standalone = standalone
 | 
						|
    end
 | 
						|
 | 
						|
    def node_type
 | 
						|
      :xmldecl
 | 
						|
    end
 | 
						|
 | 
						|
    alias :stand_alone? :standalone
 | 
						|
    alias :old_enc= :encoding=
 | 
						|
 | 
						|
    def encoding=( enc )
 | 
						|
      if enc.nil?
 | 
						|
        self.old_enc = "UTF-8"
 | 
						|
        @writeencoding = false
 | 
						|
      else
 | 
						|
        self.old_enc = enc
 | 
						|
        @writeencoding = true
 | 
						|
      end
 | 
						|
      self.dowrite
 | 
						|
    end
 | 
						|
 | 
						|
    # Only use this if you do not want the XML declaration to be written;
 | 
						|
    # this object is ignored by the XML writer.  Otherwise, instantiate your
 | 
						|
    # own XMLDecl and add it to the document.
 | 
						|
    #
 | 
						|
    # Note that XML 1.1 documents *must* include an XML declaration
 | 
						|
    def XMLDecl.default
 | 
						|
      rv = XMLDecl.new( "1.0" )
 | 
						|
      rv.nowrite
 | 
						|
      rv
 | 
						|
    end
 | 
						|
 | 
						|
    def nowrite
 | 
						|
      @writethis = false
 | 
						|
    end
 | 
						|
 | 
						|
    def dowrite
 | 
						|
      @writethis = true
 | 
						|
    end
 | 
						|
 | 
						|
    def inspect
 | 
						|
      START.sub(/\\/u, '') + " ... " + STOP.sub(/\\/u, '')
 | 
						|
    end
 | 
						|
 | 
						|
    private
 | 
						|
    def content(enc)
 | 
						|
      rv = "version='#@version'"
 | 
						|
      rv << " encoding='#{enc}'" if @writeencoding || enc !~ /utf-8/i
 | 
						|
      rv << " standalone='#@standalone'" if @standalone
 | 
						|
      rv
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |