# File lib/lolcat/lol.rb, line 32 def self.cat(fd, opts={}) print "\e[?25l" if opts[:animate] fd.each do |line| opts[:os] += 1 println(line, opts) end ensure print "\e[?25h" if opts[:animate] end
# File lib/lolcat/cat.rb, line 50 def self.cat! p = Trollop::Parser.new do version "lolcat #{Lolcat::VERSION} (c)2011 moe@busyloop.net" banner Usage: lolcat [OPTION]... [FILE]...Concatenate FILE(s), or standard input, to standard output.With no FILE, or when FILE is -, read standard input. banner '' opt :spread, "Rainbow spread", :short => 'p', :default => 3.0 opt :freq, "Rainbow frequency", :short => 'F', :default => 0.1 opt :seed, "Rainbow seed, 0 = random", :short => 'S', :default => 0 opt :animate, "Enable psychedelics", :short => 'a', :default => false opt :duration, "Animation duration", :short => 'd', :default => 12 opt :speed, "Animation speed", :short => 's', :default => 20.0 opt :force, "Force color even when stdout is not a tty", :short => 'f', :default => false opt :version, "Print version and exit", :short => 'v' opt :help, "Show this message", :short => 'h' banner Examples: lolcat f - g Output f's contents, then stdin, then g's contents. lolcat Copy standard input to standard output. fortune | lolcat Display a rainbow cookie.Report lolcat bugs to <http://www.github.org/busyloop/lolcat/issues>lolcat home page: <http://www.github.org/busyloop/lolcat/>Report lolcat translation bugs to <http://speaklolcat.com/> end opts = Trollop::with_standard_exception_handling p do begin o = p.parse ARGV rescue Trollop::HelpNeeded buf = StringIO.new p.educate buf buf.rewind halp! buf.read, {} buf.close end o end p.die :spread, "must be > 0" if opts[:spread] < 0.1 p.die :duration, "must be > 0" if opts[:duration] < 0.1 p.die :speed, "must be > 0.1" if opts[:speed] < 0.1 opts[:os] = opts[:seed] opts[:os] = rand(256) if opts[:os] == 0 begin files = ARGV.empty? ? [:stdin] : ARGV[0..-1] files.each do |file| fd = ARGF if file == '-' or file == :stdin begin fd = File.open file unless fd == ARGF if $stdout.tty? or opts[:force] Lol.cat fd, opts else until fd.eof? do $stdout.write(fd.read(8192)) end end rescue Errno::ENOENT puts "lolcat: #{file}: No such file or directory" exit 1 rescue Errno::EACCES puts "lolcat: #{file}: Permission denied" exit 1 rescue Errno::EISDIR puts "lolcat: #{file}: Is a directory" exit 1 rescue Errno::EPIPE exit 1 end end rescue Interrupt end end
# File lib/lolcat/cat.rb, line 26 def self.halp!(text, opts={}) opts = { :animate => false, :duration => 12, :os => 0, :speed => 20, :spread => 8.0, :freq => 0.3 }.merge opts begin i = 20 o = rand(256) text.split("\n").each do |line| i -= 1 opts[:os] = o+i Lol.println line, opts end puts "\n" rescue Interrupt end exit 1 end
# File lib/lolcat/lol.rb, line 42 def self.println(str, defaults={}, opts={}) opts.merge!(defaults) str.chomp! str.gsub! STRIP_ANSI, '' if !str.nil? and ($stdout.tty? or opts[:force]) opts[:animate] ? println_ani(str, opts) : println_plain(str, opts) puts end
Generated with the Darkfish Rdoc Generator 2.