From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/lib/irb/output-method.rb | 91 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 jni/ruby/lib/irb/output-method.rb (limited to 'jni/ruby/lib/irb/output-method.rb') diff --git a/jni/ruby/lib/irb/output-method.rb b/jni/ruby/lib/irb/output-method.rb new file mode 100644 index 0000000..41d397b --- /dev/null +++ b/jni/ruby/lib/irb/output-method.rb @@ -0,0 +1,91 @@ +# +# output-method.rb - output methods used by irb +# $Release Version: 0.9.6$ +# $Revision: 47120 $ +# by Keiju ISHITSUKA(keiju@ruby-lang.org) +# +# -- +# +# +# + +require "e2mmap" + +module IRB + # An abstract output class for IO in irb. This is mainly used internally by + # IRB::Notifier. You can define your own output method to use with Irb.new, + # or Context.new + class OutputMethod + extend Exception2MessageMapper + def_exception :NotImplementedError, "Need to define `%s'" + + + # Open this method to implement your own output method, raises a + # NotImplementedError if you don't define #print in your own class. + def print(*opts) + OutputMethod.Raise NotImplementedError, "print" + end + + # Prints the given +opts+, with a newline delimiter. + def printn(*opts) + print opts.join(" "), "\n" + end + + # Extends IO#printf to format the given +opts+ for Kernel#sprintf using + # #parse_printf_format + def printf(format, *opts) + if /(%*)%I/ =~ format + format, opts = parse_printf_format(format, opts) + end + print sprintf(format, *opts) + end + + # Returns an array of the given +format+ and +opts+ to be used by + # Kernel#sprintf, if there was a successful Regexp match in the given + # +format+ from #printf + # + # % + # [#0- +] + # (\*|\*[1-9][0-9]*\$|[1-9][0-9]*) + # .(\*|\*[1-9][0-9]*\$|[1-9][0-9]*|)? + # #(hh|h|l|ll|L|q|j|z|t) + # [diouxXeEfgGcsb%] + def parse_printf_format(format, opts) + return format, opts if $1.size % 2 == 1 + end + + # Calls #print on each element in the given +objs+, followed by a newline + # character. + def puts(*objs) + for obj in objs + print(*obj) + print "\n" + end + end + + # Prints the given +objs+ calling Object#inspect on each. + # + # See #puts for more detail. + def pp(*objs) + puts(*objs.collect{|obj| obj.inspect}) + end + + # Prints the given +objs+ calling Object#inspect on each and appending the + # given +prefix+. + # + # See #puts for more detail. + def ppx(prefix, *objs) + puts(*objs.collect{|obj| prefix+obj.inspect}) + end + + end + + # A standard output printer + class StdioOutputMethod