ex_aequo 0.1.1 → 0.1.2

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: aae17031917aa3f9f0321d0f71f66e55a132f53220de7614edea1aced743b989
4
- data.tar.gz: f47174e7f94bb872469c44dc13a2aef2f1ad418d39ac743fec13359a934e5b46
3
+ metadata.gz: 8b6cd6a07b2a9d435aeadf493afb7c3efb927697e24ba774e524d2c05d0345dc
4
+ data.tar.gz: 6d7ad31a36ccd40db1673cf2bb9e50303cb23300a1f0455fcdae85cb217c21ed
5
5
  SHA512:
6
- metadata.gz: 16bf984e4980c795890f5665ede3d3515c1c33872a023b346c689c2ffb83b293eb2ce06b76b363d6dc55c87f641c0cf72566b8dbad7456a742ffc0bb41d30a5f
7
- data.tar.gz: 4294e88bd872a53906aa7155cdb53e0808ea4424a47170578b7faef553bcdee0ee11ef11e69abdea0a8855ab6942affe895124ce877529d3c8e388834cfb1688
6
+ metadata.gz: 1d58560196e7c7a9ba5ab95eacced6545843a35e12c0b5cea22e43cdeb3e2d416012e4328f625d482dfdcce77b18d83320b22ac0224764555220e8fc750bd026
7
+ data.tar.gz: 1f4ca9354ac79edd8cb66690bb2b89986bd2a1411393862be7baefbfcd8dbfc62d349dad1f7f4cf4d7146636bc54049295ab0cbacd044bd52ca81c3160619b91
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'modifiers'
3
4
  module ExAequo
4
5
  module Color
5
6
  module Ansi
6
7
  extend self
8
+ include ExAequo::Color::Modifiers
7
9
 
8
10
  AnsiColorEscape = {
9
11
  black: 30,
@@ -16,12 +18,12 @@ module ExAequo
16
18
  white: 37
17
19
  }.freeze
18
20
 
19
- def ansi(name)
21
+ def ansi(name, bold: false, dim: false, italic: false, underline: false)
20
22
  case AnsiColorEscape.fetch(name.to_s.downcase.to_sym, nil)
21
23
  in nil
22
24
  raise IllegalColor, "#{name} is not one of the 8 legal basic ansi color names: #{_legal_ansi_color_names}"
23
25
  in value
24
- "\e[#{value}m"
26
+ "\e[#{value}#{postfix_modifiers(bold:, dim:, italic:, underline:)}m"
25
27
  end
26
28
  end
27
29
 
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'modifiers'
3
4
  module ExAequo
4
5
  module Color
5
6
  module Ansi256
6
7
  extend self
8
+ include ExAequo::Color::Modifiers
7
9
 
8
- def ansi256(color)
10
+ def ansi256(color, bold: false, dim: false, italic: false, underline: false)
9
11
  case color
10
12
  in 1..256
11
- "\e[38;5;#{color}m"
13
+ "\e[38;5;#{color}#{postfix_modifiers(bold:, dim:, italic:, underline:)}m"
12
14
  else
13
15
  raise IllegalColor, "#{color.inspect} is not a color number between 1 and 256"
14
16
  end
@@ -5,17 +5,68 @@ module ExAequo
5
5
  module Colorizer
6
6
  extend self
7
7
 
8
- def colorize(text, rgb: nil, ansi: nil, ansi256: nil, reset: true)
9
- unless [rgb, ansi, ansi256].compact.size == 1
10
- raise ArgumentError, 'need to specify exactly one of the following keyword arguments: :ansi, :ansi256, :rgb'
11
- end
8
+ ColorMethodKeywords = {
9
+ ansi: nil,
10
+ ansi256: nil,
11
+ rgb: nil,
12
+ }.freeze
13
+
14
+ StyleKeywords = {
15
+ bold: nil,
16
+ dim: nil,
17
+ italic: nil,
18
+ underline: nil
19
+ }.freeze
20
+
21
+ ColorizeKeywords = ColorMethodKeywords.merge(StyleKeywords).merge(reset: true)
22
+
23
+ def colorize(text, **kwds)
24
+ kwds = ColorizeKeywords.merge(kwds)
25
+ _check_args!(kwds)
12
26
 
13
27
  [
14
- ExAequo::Color.rgb(*Array(rgb)),
28
+ _color_code(**kwds),
15
29
  text,
16
- reset ? ExAequo::Color.reset : nil
30
+ _maybe_reset(kwds[:reset])
17
31
  ].join
18
32
  end
33
+
34
+ private
35
+
36
+ def _check_args!(kwds)
37
+ spurious = kwds.keys - ColorizeKeywords.keys
38
+ raise ArgumentError, "illegal keywords #{spurious}, allowed: #{ColorizeKeywords.keys}" unless spurious.empty?
39
+
40
+ _check_rgb_args!(kwds)
41
+ end
42
+
43
+ def _check_rgb_args!(kwds)
44
+ unless kwds.values_at(*ColorMethodKeywords.keys).compact.size == 1
45
+ raise ArgumentError, 'need to specify exactly one of the following keyword arguments: :ansi, :ansi256, :rgb'
46
+ end
47
+
48
+ if kwds[:rgb] && Access.any_key?(kwds, :bold, :dim)
49
+ raise(
50
+ ArgumentError,
51
+ 'specifying bold and/or dim with rgb does not make sense'
52
+ )
53
+ end
54
+ end
55
+
56
+ def _color_code(**kwds)
57
+ kwds => {ansi:, ansi256:, rgb:, italic:, underline:}
58
+ if rgb
59
+ ExAequo::Color.rgb(*Array(rgb), italic:, underline:)
60
+ elsif ansi
61
+ ExAequo::Color.ansi(ansi, **kwds.slice(*StyleKeywords.keys))
62
+ else
63
+ ExAequo::Color.ansi256(ansi256, **kwds.slice(*StyleKeywords.keys))
64
+ end
65
+ end
66
+
67
+ def _maybe_reset(reset)
68
+ reset ? ExAequo::Color.reset : nil
69
+ end
19
70
  end
20
71
  end
21
72
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ExAequo
4
+ module Color
5
+ module Modifiers extend self
6
+ ModifierValues = {
7
+ bold: 1,
8
+ dim: 2,
9
+ italic: 3,
10
+ underline: 4
11
+ }.freeze
12
+
13
+ def postfix_modifiers(bold: nil, dim: nil, italic: nil, underline: nil)
14
+ [
15
+ bold ? :bold : nil,
16
+ dim ? :dim : nil,
17
+ italic ? :italic : nil,
18
+ underline ? :underline : nil
19
+ ].compact
20
+ .map(&Access.hash_by_key(ModifierValues))
21
+ .map(&Fn.prefix_string(';'))
22
+ .join
23
+ end
24
+ end
25
+ end
26
+ end
27
+ # SPDX-License-Identifier: Apache-2.0
@@ -1,17 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'modifiers'
3
4
  module ExAequo
4
5
  module Color
5
6
  module Rgb
6
7
  extend self
7
8
 
8
- def rgb(red, green = nil, blue = nil)
9
+ def rgb(red, green = nil, blue = nil, **kwds)
9
10
  if green && blue
10
- _rgb(red, green, blue)
11
+ _rgb(red, green, blue, **kwds)
11
12
  else
12
13
  raise ArgumentError, 'takes 1 or 3 parameters, given two' if green
13
14
 
14
- _rgb(*_hex_to_triple(red))
15
+ _rgb(*_hex_to_triple(red), **kwds)
15
16
  end
16
17
  end
17
18
 
@@ -47,10 +48,11 @@ module ExAequo
47
48
  raise IllegalColor, "#{hex} is not a legal rgb hex string"
48
49
  end
49
50
 
50
- def _rgb(red, green, blue)
51
+ def _rgb(red, green, blue, italic: false, underline: false)
51
52
  case _check_rgb(red, green, blue)
52
53
  in :ok
53
- "\e[38;2;#{red};#{green};#{blue}m"
54
+ modifier = ExAequo::Color::Modifiers.postfix_modifiers(italic:, underline:)
55
+ "\e[38;2;#{red};#{green};#{blue}#{modifier}m"
54
56
  in message
55
57
  raise IllegalColor, message
56
58
  end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'kernel/access'
4
+ require_relative 'kernel/fn'
5
+
3
6
  require_relative 'color/ansi'
4
7
  require_relative 'color/ansi256'
5
8
  require_relative 'color/rgb'
@@ -12,12 +15,12 @@ module ExAequo
12
15
 
13
16
  class IllegalColor < RuntimeError; end
14
17
 
15
- def ansi(color)
16
- ExAequo::Color::Ansi.ansi(color)
18
+ def ansi(color, **kwds)
19
+ ExAequo::Color::Ansi.ansi(color, **kwds)
17
20
  end
18
21
 
19
- def ansi256(color)
20
- ExAequo::Color::Ansi256.ansi256(color)
22
+ def ansi256(color, **kwds)
23
+ ExAequo::Color::Ansi256.ansi256(color, **kwds)
21
24
  end
22
25
 
23
26
  def colorize(text, **params)
@@ -32,8 +35,8 @@ module ExAequo
32
35
  "\e[0m"
33
36
  end
34
37
 
35
- def rgb(*args)
36
- ExAequo::Color::Rgb.rgb(*args)
38
+ def rgb(*args, **kwds)
39
+ ExAequo::Color::Rgb.rgb(*args, **kwds)
37
40
  end
38
41
  end
39
42
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Access
4
+ extend self
5
+
6
+ def any_key?(hash, *keys)
7
+ keys.flatten.reduce(false) { |_, key| return true if hash[key] }
8
+ false
9
+ end
10
+
11
+ def hash_by_key(hash)
12
+ ->(key) { hash[key] }
13
+ end
14
+ end
15
+ # SPDX-License-Identifier: Apache-2.0
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fn
4
+ extend self
5
+ def prefix_string(with)
6
+ ->(subject) { "#{with}#{subject}" }
7
+ end
8
+ end
9
+ # SPDX-License-Identifier: Apache-2.0
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'kernel/fn'
4
+ # SPDX-License-Identifier: Apache-2.0
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ExAequo
4
4
  module Version
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: Apache-2.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ex_aequo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-19 00:00:00.000000000 Z
11
+ date: 2022-11-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'Some tools
14
14
 
@@ -25,7 +25,11 @@ files:
25
25
  - lib/ex_aequo/color/ansi.rb
26
26
  - lib/ex_aequo/color/ansi256.rb
27
27
  - lib/ex_aequo/color/colorizer.rb
28
+ - lib/ex_aequo/color/modifiers.rb
28
29
  - lib/ex_aequo/color/rgb.rb
30
+ - lib/ex_aequo/kernel.rb
31
+ - lib/ex_aequo/kernel/access.rb
32
+ - lib/ex_aequo/kernel/fn.rb
29
33
  - lib/ex_aequo/version.rb
30
34
  homepage: https://gitlab.com/robert_dober/rb_ex_aequo
31
35
  licenses: