lolcat 42.0.21 → 42.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/lolcat/cat.rb +100 -30
- data/lib/lolcat/lol.rb +27 -17
- data/lib/lolcat/version.rb +1 -1
- data/lolcat.gemspec +1 -0
- metadata +18 -3
data/lib/lolcat/cat.rb
CHANGED
@@ -19,43 +19,113 @@
|
|
19
19
|
require "lolcat/version"
|
20
20
|
require "lolcat/lol"
|
21
21
|
|
22
|
-
require '
|
22
|
+
require 'stringio'
|
23
|
+
require 'trollop'
|
23
24
|
|
24
25
|
module Lol
|
26
|
+
def self.halp!(text, opts={})
|
27
|
+
opts = {
|
28
|
+
:animate => false,
|
29
|
+
:duration => 12,
|
30
|
+
:os => 0,
|
31
|
+
:speed => 20,
|
32
|
+
:spread => 8.0,
|
33
|
+
:freq => 0.3
|
34
|
+
}.merge opts
|
35
|
+
|
36
|
+
begin
|
37
|
+
i = 20
|
38
|
+
o = rand(256)
|
39
|
+
text.split("\n").each do |line|
|
40
|
+
i -= 1
|
41
|
+
opts[:os] = o+i
|
42
|
+
Lol.println line, opts
|
43
|
+
end
|
44
|
+
puts "\n"
|
45
|
+
rescue Interrupt
|
46
|
+
end
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
|
25
50
|
def self.cat!
|
26
|
-
|
51
|
+
p = Trollop::Parser.new do
|
52
|
+
banner <<HEADER
|
53
|
+
|
54
|
+
Usage: lolcat [OPTION]... [FILE]...
|
55
|
+
|
56
|
+
Concatenate FILE(s), or standard input, to standard output.
|
57
|
+
With no FILE, or when FILE is -, read standard input.
|
58
|
+
|
59
|
+
HEADER
|
60
|
+
banner ''
|
61
|
+
opt :spread, "Rainbow spread", :short => 'p', :default => 8.0
|
62
|
+
opt :seed, "Rainbow seed, 0 = random", :short => 'S', :default => 0
|
63
|
+
opt :animate, "Enable psychedelics", :short => 'a', :default => false
|
64
|
+
opt :duration, "Animation duration", :short => 'd', :default => 12
|
65
|
+
opt :speed, "Animation speed", :short => 's', :default => 20.0
|
66
|
+
opt :force, "Force color even when stdout is not a tty", :short => 'f', :default => false
|
67
|
+
opt :version, "Print version and exit", :short => 'v'
|
68
|
+
opt :help, "Show this message", :short => 'h'
|
69
|
+
banner <<FOOTER
|
70
|
+
|
71
|
+
Examples:
|
72
|
+
lolcat f - g Output f's contents, then standard input, then g's contents.
|
73
|
+
lolcat Copy standard input to standard output.
|
74
|
+
fortune | lolcat Display a rainbow cookie.
|
75
|
+
|
76
|
+
Report lolcat bugs to <http://www.github.org/busyloop/lolcat/issues>
|
77
|
+
lolcat home page: <http://www.github.org/busyloop/lolcat/>
|
78
|
+
Report lolcat translation bugs to <http://speaklolcat.com/>
|
79
|
+
For complete documentation, read the source!
|
80
|
+
|
81
|
+
FOOTER
|
82
|
+
end
|
83
|
+
|
84
|
+
opts = Trollop::with_standard_exception_handling p do
|
27
85
|
begin
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
puts
|
37
|
-
Lol.whut "Examples:"
|
38
|
-
Lol.whut " lolcat f - g Output f's contents, then standard input, then g's contents.", 16
|
39
|
-
Lol.whut " lolcat Copy standard input to standard output.", 15
|
40
|
-
Lol.whut " fortune | lolcat Display a rainbow cookie.", 14
|
41
|
-
|
42
|
-
puts
|
43
|
-
Lol.whut "Report lolcat bugs to <http://www.github.org/busyloop/lolcat/issues>", 13
|
44
|
-
Lol.whut "lolcat home page: <http://www.github.org/busyloop/lolcat/>", 12
|
45
|
-
Lol.whut "Report lolcat translation bugs to <http://speaklolcat.com/>", 11
|
46
|
-
Lol.whut "For complete documentation, read the source!", 10
|
47
|
-
puts
|
48
|
-
rescue Interrupt
|
86
|
+
o = p.parse ARGV
|
87
|
+
rescue Trollop::HelpNeeded
|
88
|
+
buf = StringIO.new
|
89
|
+
p.educate buf
|
90
|
+
buf.rewind
|
91
|
+
halp! buf.read, {}
|
92
|
+
buf.close
|
49
93
|
end
|
50
|
-
|
94
|
+
o
|
51
95
|
end
|
52
|
-
|
96
|
+
|
97
|
+
p.die :spread, "must be > 0" if opts[:spread] < 0.1
|
98
|
+
p.die :duration, "must be > 0" if opts[:duration] < 0.1
|
99
|
+
p.die :speed, "must be > 0.1" if opts[:duration] < 0.1
|
100
|
+
|
101
|
+
opts = { :freq => 0.3 }.merge(opts)
|
102
|
+
opts[:os] = opts[:seed]
|
103
|
+
opts[:os] = rand(256) if opts[:os] == 0
|
104
|
+
|
53
105
|
begin
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
106
|
+
files = ARGV.empty? ? [:stdin] : ARGV[0..-1]
|
107
|
+
files.each do |file|
|
108
|
+
fd = ARGF if file == '-' or file == :stdin
|
109
|
+
begin
|
110
|
+
fd = File.open file unless fd == ARGF
|
111
|
+
|
112
|
+
if $stdout.tty? or opts[:force]
|
113
|
+
Lol.cat fd, opts
|
114
|
+
else
|
115
|
+
until fd.eof? do
|
116
|
+
$stdout.write(fd.read(8192))
|
117
|
+
end
|
118
|
+
end
|
119
|
+
rescue Errno::ENOENT
|
120
|
+
puts "lolcat: #{file}: No such file or directory"
|
121
|
+
exit 1
|
122
|
+
rescue Errno::EACCES
|
123
|
+
puts "lolcat: #{file}: Permission denied"
|
124
|
+
exit 1
|
125
|
+
rescue Errno::EISDIR
|
126
|
+
puts "lolcat: #{file}: Is a directory"
|
127
|
+
exit 1
|
128
|
+
end
|
59
129
|
end
|
60
130
|
rescue Interrupt
|
61
131
|
end
|
data/lib/lolcat/lol.rb
CHANGED
@@ -17,10 +17,11 @@
|
|
17
17
|
# 0. You just DO WHAT THE FUCK YOU WANT TO.
|
18
18
|
|
19
19
|
require "lolcat/version"
|
20
|
-
|
21
20
|
require 'paint'
|
22
21
|
|
23
22
|
module Lol
|
23
|
+
STRIP_ANSI = Regexp.compile '\e\[(\d+)(;\d+)?(;\d+)?[m|K]', nil
|
24
|
+
|
24
25
|
def self.rainbow(freq, i)
|
25
26
|
red = Math.sin(freq*i + 0) * 127 + 128
|
26
27
|
green = Math.sin(freq*i + 2*Math::PI/3) * 127 + 128
|
@@ -28,28 +29,37 @@ module Lol
|
|
28
29
|
"#%02X%02X%02X" % [ red, green, blue ]
|
29
30
|
end
|
30
31
|
|
31
|
-
def self.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
print Paint[c, rainbow(0.3, i+j/spread)]
|
36
|
-
end
|
37
|
-
sleep delay
|
32
|
+
def self.cat(fd, opts={})
|
33
|
+
fd.each do |line|
|
34
|
+
opts[:os] += 1
|
35
|
+
println(line, opts)
|
38
36
|
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.println(str, defaults={}, opts={})
|
40
|
+
opts.merge!(defaults)
|
41
|
+
str.chomp!
|
42
|
+
str.gsub! STRIP_ANSI, '' if !str.nil? and ($stdout.tty? or opts[:force])
|
43
|
+
opts[:animate] ? println_ani(str, opts) : println_plain(str, opts)
|
39
44
|
puts
|
40
45
|
end
|
41
46
|
|
42
|
-
|
43
|
-
|
47
|
+
private
|
48
|
+
|
49
|
+
def self.println_plain(str, defaults={}, opts={})
|
50
|
+
opts.merge!(defaults)
|
51
|
+
str.chomp.chars.each_with_index do |c,i|
|
52
|
+
print Paint[c, rainbow(opts[:freq], opts[:os]+i/opts[:spread])]
|
53
|
+
end
|
44
54
|
end
|
45
55
|
|
46
|
-
def self.
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
56
|
+
def self.println_ani(str, opts={})
|
57
|
+
return if str.empty?
|
58
|
+
(1..opts[:duration]).each do |i|
|
59
|
+
print "\e[#{str.length}D"
|
60
|
+
opts[:os] += opts[:spread]/Math::PI
|
61
|
+
println_plain(str, opts)
|
62
|
+
sleep 1.0/opts[:speed]
|
53
63
|
end
|
54
64
|
end
|
55
65
|
end
|
data/lib/lolcat/version.rb
CHANGED
data/lolcat.gemspec
CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
|
14
14
|
#s.rubyforge_project = "lolcat"
|
15
15
|
s.add_dependency "paint", "~> 0.8.3"
|
16
|
+
s.add_dependency "trollop", "~> 1.16.2"
|
16
17
|
|
17
18
|
s.files = `git ls-files`.split("\n")
|
18
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 42
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 42.0.
|
8
|
+
- 42
|
9
|
+
version: 42.0.42
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Moe
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-08-
|
17
|
+
date: 2011-08-11 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -32,6 +32,21 @@ dependencies:
|
|
32
32
|
version: 0.8.3
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: trollop
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 1
|
45
|
+
- 16
|
46
|
+
- 2
|
47
|
+
version: 1.16.2
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
35
50
|
description: Rainbows and unicorns!
|
36
51
|
email:
|
37
52
|
- moe@busyloop.net
|