diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/lib/irb/output-method.rb |
Fresh start
Diffstat (limited to 'jni/ruby/lib/irb/output-method.rb')
-rw-r--r-- | jni/ruby/lib/irb/output-method.rb | 91 |
1 files changed, 91 insertions, 0 deletions
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 + # + # % + # <flag> [#0- +] + # <minimum field width> (\*|\*[1-9][0-9]*\$|[1-9][0-9]*) + # <precision>.(\*|\*[1-9][0-9]*\$|[1-9][0-9]*|)? + # #<length modifier>(hh|h|l|ll|L|q|j|z|t) + # <conversion specifier>[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<OutputMethod + # Prints the given +opts+ to standard output, see IO#print for more + # information. + def print(*opts) + STDOUT.print(*opts) + end + end +end |