term-ansicolor 1.10.4 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d75f19d115fdee4233a120ece01a38b75c7f0cff14243e477def07b314f55b42
4
- data.tar.gz: 9a3c5f4ac0abbd01a552ce2e5358bd1d3b2825c392495c941209e71cdbfb8e07
3
+ metadata.gz: a99b1522303d7fa622793a7b924e74f897de9a031f775f723aac24bb3f7e6bf5
4
+ data.tar.gz: 58f241a9bdbc068dae3c856aaf919939e3e1a25f831fa4fa6ed562d324365e55
5
5
  SHA512:
6
- metadata.gz: '015294663f0738e6cbeed73b3aa34d7ff6a19a9bc13be6ab683a750956cc854dae0d7630e606ff298252142f35f10b3a4cd02592761d72403bfd2d3de845be82'
7
- data.tar.gz: 18741931918cf7c07192263ea683c69c7b6074d44572267e0d01d84d27a0f00ea66a0ae2d95ed2b96eee0e176bdf5f791f92d5aefb78a806ede47f2cc2a3b0ae
6
+ metadata.gz: 7e2716d88870533348a32230da0436fbb127d7dac440d4da5bbf292489b005d8d282f35b067bc14cd5919fbc4ad34ddfdbd1c2f016e5abc6d15fa11d09a988b9
7
+ data.tar.gz: 4d9601059cdc1d848a0ca8a6b7aef4bc88656ac1e55c96f391269b4f8e53ef3ec216c7882d49af63f7dc45e7c2484d4354d0a88ee8544e3a27b580ef103fae01
data/.gitignore CHANGED
@@ -4,6 +4,7 @@
4
4
  .rvmrc
5
5
  Gemfile.lock
6
6
  coverage
7
+ cscope.out
7
8
  errors.lst
8
9
  pkg
9
10
  tags
data/README.md CHANGED
@@ -31,6 +31,9 @@ The following executables are provided with Term::ANSIColor:
31
31
  * `term_mandel`: displays the mandelbrot set in the terminal
32
32
  * `term_snow`: displays falling snow in the terminal using ANSI movement
33
33
  sequences.
34
+ * `term_plasma`: draws a plasma effect on the console, possibly animated and
35
+ refreshed every `-n seconds`.
36
+
34
37
 
35
38
  Additionally the file examples/example.rb in the source/gem-distribution shows
36
39
  how this library can be used.
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ GemHadar do
15
15
 
16
16
  test_dir 'tests'
17
17
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', '.rvmrc', 'coverage',
18
- 'tags', '.bundle', '.byebug_history', 'errors.lst'
18
+ 'tags', '.bundle', '.byebug_history', 'errors.lst', 'cscope.out'
19
19
 
20
20
  readme 'README.md'
21
21
  executables.merge Dir['bin/*'].map { |x| File.basename(x) }
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.10.4
1
+ 1.11.0
data/bin/term_plasma ADDED
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'tins/go'
4
+ include Tins::GO
5
+ require 'term/ansicolor'
6
+ include Term::ANSIColor
7
+ Term::ANSIColor.true_coloring = ENV['COLORTERM'] =~ /\A(truecolor|24bit)\z/
8
+ include Math
9
+
10
+ # Generates a palette of 256 colors based on sine waves
11
+ #
12
+ # @return [Array<Array<Integer>>] An array of arrays, each containing
13
+ # three integers representing the RGB values of a color.
14
+ def generate_palette
15
+ (0..255).map { |i|
16
+ [
17
+ 128 + 128 * sin(PI * i / 32.0),
18
+ 128 + 128 * sin(PI * i / 64.0),
19
+ 128 + 128 * sin(PI * i / 128.0),
20
+ ].map { _1.clamp(0, 255).round }
21
+ }
22
+ end
23
+
24
+ # Resets the terminal to its original state, and assigns width $w and height
25
+ # $h.
26
+ def full_reset
27
+ $w, $h = Tins::Terminal.cols, Tins::Terminal.lines
28
+ $h *= 2
29
+ print reset, clear_screen, move_home, hide_cursor
30
+ end
31
+
32
+ # Generates a screen based on a plasma.
33
+ #
34
+ # @param plasma [Array<Array<Integer>>] An array of arrays, each containing
35
+ # three integers representing the RGB values of a color.
36
+ # @return [String] The string representation of the screen, each character
37
+ # representing a pixel on the screen with the corresponding color.
38
+ def generate_screen(plasma)
39
+ screen = ''
40
+ 0.step($h - 1, 2) do |y|
41
+ 0.upto($w - 1) do |x|
42
+ screen << color(plasma[y][x]) + on_color(plasma[y + 1][x]) + ?▀
43
+ end
44
+ end
45
+ screen
46
+ end
47
+
48
+ # Generates a plasma generated based on sine waves
49
+ #
50
+ # @param now [Float] A value based on the current time in seconds
51
+ # @return [Array<Array<Integer>>] An array of arrays, each containing
52
+ # three integers representing the RGB values of a color.
53
+ def generate_plasma(now)
54
+ plasma = Array.new($h) { [ nil ] * $w }
55
+ 0.upto($h - 1) do |y|
56
+ 0.upto($w - 1) do |x|
57
+ x, y = x.to_f, y.to_f
58
+ color = (
59
+ 128.0 + (128.0 * sin((x / 7.0) - 3.0 * cos(now / 2.0))) +
60
+ 128.0 + (128.0 * sin((y / 13.0) - 2.0 * sin(now))) +
61
+ 128.0 + (128.0 * sin(hypot((x - $w / 3.0), (y - $h / 2.0)) / 5.0)) +
62
+ 128.0 + (128.0 * sin((hypot(x, y) / 5.0) - sin(now / 3.0)))
63
+ ) / 4.0
64
+ plasma[y][x] = $palette[(color + now).round % $palette.size]
65
+ end
66
+ end
67
+ plasma
68
+ end
69
+
70
+ $opts = go('n:')
71
+
72
+ $palette = generate_palette
73
+
74
+ begin
75
+ $full_reset = true
76
+ trap(:SIGWINCH) { $full_reset = true }
77
+
78
+ loop do
79
+ if $full_reset
80
+ $full_reset = false
81
+ full_reset
82
+ end
83
+
84
+ now = Time.now.to_f / ($opts[?n]&.to_f || 1)
85
+ plasma = generate_plasma(now)
86
+ print move_home, generate_screen(plasma), reset
87
+
88
+ if n = $opts[?n]&.to_f
89
+ sleep n
90
+ else
91
+ print move_to_column(1), erase_in_line, show_cursor
92
+ exit
93
+ end
94
+ end
95
+ rescue Interrupt
96
+ print reset, clear_screen, move_home, show_cursor
97
+ end
@@ -40,7 +40,7 @@ module Term
40
40
  Attribute.set :on_color4, 4, html: '#000080', background: true
41
41
  Attribute.set :on_color5, 5, html: '#800080', background: true
42
42
  Attribute.set :on_color6, 6, html: '#008080', background: true
43
- Attribute.set :on_color7, 7, html: '#c0c0c0'
43
+ Attribute.set :on_color7, 7, html: '#c0c0c0', background: true
44
44
 
45
45
  Attribute.set :on_color8, 8, html: '#808080', background: true
46
46
  Attribute.set :on_color9, 9, html: '#ff0000', background: true
@@ -49,12 +49,25 @@ module Term
49
49
  @__store__[name.to_sym]
50
50
  end
51
51
 
52
- def self.rgb_colors(options = {}, &block)
53
- colors = attributes.select(&:rgb_color?)
54
- if options.key?(:gray) && !options[:gray]
55
- colors = colors.reject(&:gray?)
52
+ class << self
53
+ memoize method:
54
+ def rgb_colors(options = {}, &block)
55
+ colors = attributes.select(&:rgb_color?)
56
+ if options.key?(:gray) && !options[:gray]
57
+ colors = colors.reject(&:gray?)
58
+ end
59
+ colors.each(&block)
60
+ end
61
+
62
+ memoize method:
63
+ def rgb_foreground_colors(options = {}, &block)
64
+ rgb_colors(options).reject(&:background?).each(&block)
65
+ end
66
+
67
+ memoize method:
68
+ def rgb_background_colors(options = {}, &block)
69
+ rgb_colors(options).select(&:background?).each(&block)
56
70
  end
57
- colors.each(&block)
58
71
  end
59
72
 
60
73
  def self.named_attributes(&block)
@@ -63,14 +76,12 @@ module Term
63
76
 
64
77
  def self.nearest_rgb_color(color, options = {})
65
78
  rgb = RGBTriple[color]
66
- colors = rgb_colors(options)
67
- colors.reject(&:background?).min_by { |c| c.distance_to(rgb, options) }
79
+ rgb_foreground_colors(options).min_by { |c| c.distance_to(rgb, options) }
68
80
  end
69
81
 
70
82
  def self.nearest_rgb_on_color(color, options = {})
71
83
  rgb = RGBTriple[color]
72
- colors = rgb_colors(options)
73
- colors.select(&:background?).min_by { |c| c.distance_to(rgb, options) }
84
+ rgb_background_colors(options).min_by { |c| c.distance_to(rgb, options) }
74
85
  end
75
86
 
76
87
  def self.true_color(color, options = {})
@@ -2,7 +2,7 @@ module Term
2
2
  module ANSIColor
3
3
  class HSLTriple
4
4
  def self.from_rgb_triple(rgb)
5
- ps = rgb.to_a.map { |x| x / 255.0 }
5
+ ps = [ rgb.red / 255.0, rgb.green / 255.0, rgb.blue / 255.0 ]
6
6
  p_min = ps.min
7
7
  p_max = ps.max
8
8
  p_red, p_green, p_blue = ps
@@ -53,11 +53,7 @@ module Term
53
53
  private
54
54
 
55
55
  def parse_row
56
- row = []
57
- @width.times do
58
- row << parse_next_pixel
59
- end
60
- row
56
+ @width.times.map { parse_next_pixel }
61
57
  end
62
58
 
63
59
  def parse_next_pixel
@@ -19,16 +19,16 @@ module Term
19
19
  if v <= 0.04045
20
20
  v / 12
21
21
  else
22
- ( (v + 0.055) / 1.055) ** 2.4
22
+ ( (v + 0.055) / 1.055 ) ** 2.4
23
23
  end
24
24
  end
25
25
 
26
26
  def normalize_rgb_triple(rgb_triple)
27
27
  [
28
- rgb_triple.red,
29
- rgb_triple.green,
30
- rgb_triple.blue
31
- ].map { |v| normalize(v) }
28
+ normalize(rgb_triple.red),
29
+ normalize(rgb_triple.green),
30
+ normalize(rgb_triple.blue),
31
+ ]
32
32
  end
33
33
  end
34
34
  end
@@ -59,7 +59,11 @@ module Term
59
59
  end
60
60
 
61
61
  def initialize(red, green, blue)
62
- @values = [ red, green, blue ].map! { |v| v.clamp(0, 0xff) }
62
+ @values = [
63
+ red.clamp(0, 0xff),
64
+ green.clamp(0, 0xff),
65
+ blue.clamp(0, 0xff),
66
+ ]
63
67
  end
64
68
 
65
69
  def red
@@ -106,7 +110,7 @@ module Term
106
110
 
107
111
  def css(percentage: false)
108
112
  if percentage
109
- "rgb(%s%%,%s%%,%s%%)" % @values.map { |v| 100.0 * v / 255 }
113
+ "rgb(%s%%,%s%%,%s%%)" % percentages
110
114
  else
111
115
  "rgb(%u,%u,%u)" % @values
112
116
  end
@@ -1,6 +1,6 @@
1
1
  module Term::ANSIColor
2
2
  # Term::ANSIColor version
3
- VERSION = '1.10.4'
3
+ VERSION = '1.11.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -1,29 +1,29 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: term-ansicolor 1.10.4 ruby lib
2
+ # stub: term-ansicolor 1.11.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "term-ansicolor".freeze
6
- s.version = "1.10.4".freeze
6
+ s.version = "1.11.0".freeze
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2024-07-15"
11
+ s.date = "2024-08-01"
12
12
  s.description = "This library uses ANSI escape sequences to control the attributes of terminal output".freeze
13
13
  s.email = "flori@ping.de".freeze
14
- s.executables = ["term_cdiff".freeze, "term_colortab".freeze, "term_decolor".freeze, "term_display".freeze, "term_mandel".freeze, "term_snow".freeze]
14
+ s.executables = ["term_cdiff".freeze, "term_colortab".freeze, "term_decolor".freeze, "term_display".freeze, "term_mandel".freeze, "term_plasma".freeze, "term_snow".freeze]
15
15
  s.extra_rdoc_files = ["README.md".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/attribute/underline.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze]
16
- s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".utilsrc".freeze, "CHANGES".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/term_cdiff".freeze, "bin/term_colortab".freeze, "bin/term_decolor".freeze, "bin/term_display".freeze, "bin/term_mandel".freeze, "bin/term_snow".freeze, "examples/example.rb".freeze, "examples/lambda-red-plain.ppm".freeze, "examples/lambda-red.png".freeze, "examples/lambda-red.ppm".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/.keep".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/attribute/underline.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze, "term-ansicolor.gemspec".freeze, "tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
16
+ s.files = [".all_images.yml".freeze, ".gitignore".freeze, ".utilsrc".freeze, "CHANGES".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/term_cdiff".freeze, "bin/term_colortab".freeze, "bin/term_decolor".freeze, "bin/term_display".freeze, "bin/term_mandel".freeze, "bin/term_plasma".freeze, "bin/term_snow".freeze, "examples/example.rb".freeze, "examples/lambda-red-plain.ppm".freeze, "examples/lambda-red.png".freeze, "examples/lambda-red.ppm".freeze, "lib/term/ansicolor.rb".freeze, "lib/term/ansicolor/.keep".freeze, "lib/term/ansicolor/attribute.rb".freeze, "lib/term/ansicolor/attribute/color256.rb".freeze, "lib/term/ansicolor/attribute/color8.rb".freeze, "lib/term/ansicolor/attribute/intense_color8.rb".freeze, "lib/term/ansicolor/attribute/text.rb".freeze, "lib/term/ansicolor/attribute/underline.rb".freeze, "lib/term/ansicolor/hsl_triple.rb".freeze, "lib/term/ansicolor/hyperlink.rb".freeze, "lib/term/ansicolor/movement.rb".freeze, "lib/term/ansicolor/ppm_reader.rb".freeze, "lib/term/ansicolor/rgb_color_metrics.rb".freeze, "lib/term/ansicolor/rgb_triple.rb".freeze, "lib/term/ansicolor/version.rb".freeze, "term-ansicolor.gemspec".freeze, "tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
17
17
  s.homepage = "https://github.com/flori/term-ansicolor".freeze
18
18
  s.licenses = ["Apache-2.0".freeze]
19
19
  s.rdoc_options = ["--title".freeze, "Term-ansicolor - Ruby library that colors strings using ANSI escape sequences".freeze, "--main".freeze, "README.md".freeze]
20
- s.rubygems_version = "3.5.11".freeze
20
+ s.rubygems_version = "3.5.16".freeze
21
21
  s.summary = "Ruby library that colors strings using ANSI escape sequences".freeze
22
22
  s.test_files = ["tests/ansicolor_test.rb".freeze, "tests/attribute_test.rb".freeze, "tests/hsl_triple_test.rb".freeze, "tests/hyperlink_test.rb".freeze, "tests/ppm_reader_test.rb".freeze, "tests/rgb_color_metrics_test.rb".freeze, "tests/rgb_triple_test.rb".freeze, "tests/test_helper.rb".freeze]
23
23
 
24
24
  s.specification_version = 4
25
25
 
26
- s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.16.0".freeze])
26
+ s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.16.1".freeze])
27
27
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
28
28
  s.add_development_dependency(%q<test-unit>.freeze, [">= 0".freeze])
29
29
  s.add_development_dependency(%q<utils>.freeze, [">= 0".freeze])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: term-ansicolor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.4
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-15 00:00:00.000000000 Z
11
+ date: 2024-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.16.0
19
+ version: 1.16.1
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.16.0
26
+ version: 1.16.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: simplecov
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +103,7 @@ executables:
103
103
  - term_decolor
104
104
  - term_display
105
105
  - term_mandel
106
+ - term_plasma
106
107
  - term_snow
107
108
  extensions: []
108
109
  extra_rdoc_files:
@@ -136,6 +137,7 @@ files:
136
137
  - bin/term_decolor
137
138
  - bin/term_display
138
139
  - bin/term_mandel
140
+ - bin/term_plasma
139
141
  - bin/term_snow
140
142
  - examples/example.rb
141
143
  - examples/lambda-red-plain.ppm
@@ -188,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
190
  - !ruby/object:Gem::Version
189
191
  version: '0'
190
192
  requirements: []
191
- rubygems_version: 3.5.11
193
+ rubygems_version: 3.5.16
192
194
  signing_key:
193
195
  specification_version: 4
194
196
  summary: Ruby library that colors strings using ANSI escape sequences