mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	string. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
#
 | 
						|
#   xmp.rb - irb version of gotoken xmp
 | 
						|
#   	$Release Version: 0.9$
 | 
						|
#   	$Revision$
 | 
						|
#   	by Keiju ISHITSUKA(Nippon Rational Inc.)
 | 
						|
#
 | 
						|
# --
 | 
						|
#
 | 
						|
#   
 | 
						|
#
 | 
						|
 | 
						|
require "irb"
 | 
						|
require "irb/frame"
 | 
						|
 | 
						|
class XMP
 | 
						|
  @RCS_ID='-$Id$-'
 | 
						|
 | 
						|
  def initialize(bind = nil)
 | 
						|
    IRB.init_config(nil)
 | 
						|
    #IRB.parse_opts
 | 
						|
    #IRB.load_modules
 | 
						|
 | 
						|
    IRB.conf[:PROMPT_MODE] = :XMP
 | 
						|
 | 
						|
    bind = IRB::Frame.top(1) unless bind
 | 
						|
    ws = IRB::WorkSpace.new(bind)
 | 
						|
    @io = StringInputMethod.new
 | 
						|
    @irb = IRB::Irb.new(ws, @io)
 | 
						|
    @irb.context.ignore_sigint = false
 | 
						|
 | 
						|
#    IRB.conf[:IRB_RC].call(@irb.context) if IRB.conf[:IRB_RC]
 | 
						|
    IRB.conf[:MAIN_CONTEXT] = @irb.context
 | 
						|
  end
 | 
						|
 | 
						|
  def puts(exps)
 | 
						|
    @io.puts exps
 | 
						|
 | 
						|
    if @irb.context.ignore_sigint
 | 
						|
      begin
 | 
						|
	trap_proc_b = trap("SIGINT"){@irb.signal_handle}
 | 
						|
	catch(:IRB_EXIT) do
 | 
						|
	  @irb.eval_input
 | 
						|
	end
 | 
						|
      ensure
 | 
						|
	trap("SIGINT", trap_proc_b)
 | 
						|
      end
 | 
						|
    else
 | 
						|
      catch(:IRB_EXIT) do
 | 
						|
	@irb.eval_input
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  class StringInputMethod < IRB::InputMethod
 | 
						|
    def initialize
 | 
						|
      super
 | 
						|
      @exps = []
 | 
						|
    end
 | 
						|
 | 
						|
    def eof?
 | 
						|
      @exps.empty?
 | 
						|
    end
 | 
						|
 | 
						|
    def gets
 | 
						|
      while l = @exps.shift
 | 
						|
	next if /^\s+$/ =~ l
 | 
						|
	l.concat "\n"
 | 
						|
	print @prompt, l
 | 
						|
	break
 | 
						|
      end
 | 
						|
      l
 | 
						|
    end
 | 
						|
 | 
						|
    def puts(exps)
 | 
						|
      @exps.concat exps.split(/\n/)
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
def xmp(exps, bind = nil)
 | 
						|
  bind = IRB::Frame.top(1) unless bind
 | 
						|
  xmp = XMP.new(bind)
 | 
						|
  xmp.puts exps
 | 
						|
  xmp
 | 
						|
end
 |