lib/ripl/rc/multiline.rb in ripl-rc-0.1.5 vs lib/ripl/rc/multiline.rb in ripl-rc-0.2.0

- old
+ new

@@ -1,53 +1,67 @@ -require 'ripl' +require 'ripl/rc/u' # from https://github.com/janlelis/ripl-multi_line -module Ripl::Rc; end module Ripl::Rc::Multiline + include Ripl::Rc::U + + # test those: + # ruby -e '"' + # ruby -e '{' + # ruby -e '[' + # ruby -e '(' + # ruby -e 'class C' + # ruby -e 'def f' + # ruby -e 'begin' ERROR_REGEXP = Regexp.new( - [ "unexpected \\$end", - "unterminated [a-z]+ meets end of file", + [ # string + "unterminated string meets end of file", + # mri and rubinius + "syntax error, unexpected \\$end", # rubinius - "expecting '\\\\n' or ';'", - "missing 'end'", - "expecting '}'", + "expecting '.+'( or '.+')*", # jruby "syntax error, unexpected end-of-file", ].join('|')) def before_loop + return super if Multiline.disabled? @rc_multiline_buffer = [] super end def prompt + return super if Multiline.disabled? if @rc_multiline_buffer.empty? super else "#{' '*(@prompt.size-2)}| " end end def loop_once + return super if Multiline.disabled? catch(:rc_multiline_cont) do super @rc_multiline_buffer.clear end end def print_eval_error(e) + return super if Multiline.disabled? if e.is_a?(SyntaxError) && e.message =~ ERROR_REGEXP @rc_multiline_buffer << @input if @rc_multiline_buffer.empty? history.pop throw :rc_multiline_cont else super end end def loop_eval(input) + return super if Multiline.disabled? if @rc_multiline_buffer.empty? super else @rc_multiline_buffer << input history.pop @@ -55,9 +69,10 @@ super str end end def handle_interrupt + return super if Multiline.disabled? if @rc_multiline_buffer.empty? super else line = @rc_multiline_buffer.pop if @rc_multiline_buffer.empty?