mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 f04dd0f08b
			
		
	
	
		f04dd0f08b
		
	
	
	
	
		
			
			the file to read, to the internal encoding. [Bug #4281][ruby-dev:43036] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			37 lines
		
	
	
	
		
			893 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			893 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| module IRB
 | |
|   class << (MagicFile = Object.new)
 | |
|     # see parser_magic_comment in parse.y
 | |
|     ENCODING_SPEC_RE = %r"coding\s*[=:]\s*([[:alnum:]\-_]+)"
 | |
| 
 | |
|     def open(path)
 | |
|       io = File.open(path, 'rb')
 | |
|       line = io.gets
 | |
|       line = io.gets if line[0,2] == "#!"
 | |
|       encoding = detect_encoding(line)
 | |
|       internal_encoding = encoding
 | |
|       encoding ||= default_src_encoding
 | |
|       io.rewind
 | |
|       io.set_encoding(encoding, internal_encoding)
 | |
| 
 | |
|       if block_given?
 | |
|         begin
 | |
|           return (yield io)
 | |
|         ensure
 | |
|           io.close
 | |
|         end
 | |
|       else
 | |
|         return io
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     private
 | |
|     def detect_encoding(line)
 | |
|       return unless line[0] == ?#
 | |
|       line = line[1..-1]
 | |
|       line = $1 if line[/-\*-\s*(.*?)\s*-*-$/]
 | |
|       return nil unless ENCODING_SPEC_RE =~ line
 | |
|       encoding = $1
 | |
|       return encoding.sub(/-(?:mac|dos|unix)/i, '')
 | |
|     end
 | |
|   end
 | |
| end
 |