module IRB::MagicFile

Constants

ENCODING_SPEC_RE

see parser_magic_comment in parse.y

Public Class Methods

open(path) { |io)| ... } click to toggle source
# File lib/irb/magic-file.rb, line 7
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 ||= IRB.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 Class Methods

detect_encoding(line) click to toggle source
# File lib/irb/magic-file.rb, line 29
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