Fix up Rubinius specific library specs.
[rbx.git] / lib / irb / xmp.rb
blob7626511a41bc7c67d21c6cddd1dd1b90af397242
2 #   xmp.rb - irb version of gotoken xmp
3 #       $Release Version: 0.9$
4 #       $Revision: 11708 $
5 #       $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6 #       by Keiju ISHITSUKA(Nippon Rational Inc.)
8 # --
10 #   
13 require "irb"
14 require "irb/frame"
16 class XMP
17   @RCS_ID='-$Id: xmp.rb 11708 2007-02-12 23:01:19Z shyouhei $-'
19   def initialize(bind = nil)
20     IRB.init_config(nil)
21     #IRB.parse_opts
22     #IRB.load_modules
24     IRB.conf[:PROMPT_MODE] = :XMP
26     bind = IRB::Frame.top(1) unless bind
27     ws = IRB::WorkSpace.new(bind)
28     @io = StringInputMethod.new
29     @irb = IRB::Irb.new(ws, @io)
30     @irb.context.ignore_sigint = false
32 #    IRB.conf[:IRB_RC].call(@irb.context) if IRB.conf[:IRB_RC]
33     IRB.conf[:MAIN_CONTEXT] = @irb.context
34   end
36   def puts(exps)
37     @io.puts exps
39     if @irb.context.ignore_sigint
40       begin
41         trap_proc_b = trap("SIGINT"){@irb.signal_handle}
42         catch(:IRB_EXIT) do
43           @irb.eval_input
44         end
45       ensure
46         trap("SIGINT", trap_proc_b)
47       end
48     else
49       catch(:IRB_EXIT) do
50         @irb.eval_input
51       end
52     end
53   end
55   class StringInputMethod < IRB::InputMethod
56     def initialize
57       super
58       @exps = []
59     end
61     def eof?
62       @exps.empty?
63     end
65     def gets
66       while l = @exps.shift
67         next if /^\s+$/ =~ l
68         l.concat "\n"
69         print @prompt, l
70         break
71       end
72       l
73     end
75     def puts(exps)
76       @exps.concat exps.split(/\n/)
77     end
78   end
79 end
81 def xmp(exps, bind = nil)
82   bind = IRB::Frame.top(1) unless bind
83   xmp = XMP.new(bind)
84   xmp.puts exps
85   xmp
86 end