ex_aequo 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerable
4
+ def find_value(&block)
5
+ each do |ele|
6
+ case block.(ele)
7
+ in nil
8
+ nil
9
+ in false
10
+ false
11
+ in value
12
+ return value
13
+ end
14
+ end
15
+ nil
16
+ end
17
+ end
18
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -5,5 +5,8 @@ module Fn
5
5
  def prefix_string(with)
6
6
  ->(subject) { "#{with}#{subject}" }
7
7
  end
8
+ def split_string(by=/\s+/)
9
+ ->(subject) {subject.split(by)}
10
+ end
8
11
  end
9
12
  # SPDX-License-Identifier: Apache-2.0
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MatchData
4
+ def deconstruct(*) = to_a
5
+ end
6
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ostruct'
3
4
  class MyStruct < OpenStruct
4
5
  module ClassMethods
5
6
  def from_reduce(keys, acc, &reducer)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ExAequo
4
4
  module Version
5
- VERSION = '0.2.6'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: Apache-2.0
data/lib/ex_aequo.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ExAequo
4
4
  end
5
+ require 'ostruct'
5
6
  require_relative 'ex_aequo/args_parser'
6
- require_relative 'ex_aequo/color'
7
7
  require_relative 'ex_aequo/version'
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.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-07 00:00:00.000000000 Z
11
+ date: 2024-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: forwarder3
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: ostruct
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: 'Some tools
28
42
 
29
43
  '
@@ -37,18 +51,14 @@ files:
37
51
  - lib/ex_aequo.rb
38
52
  - lib/ex_aequo/args.rb
39
53
  - lib/ex_aequo/args_parser.rb
40
- - lib/ex_aequo/color.rb
41
- - lib/ex_aequo/color/ansi.rb
42
- - lib/ex_aequo/color/ansi256.rb
43
- - lib/ex_aequo/color/colorizer.rb
44
- - lib/ex_aequo/color/modifiers.rb
45
- - lib/ex_aequo/color/rgb.rb
46
- - lib/ex_aequo/color/text.rb
47
- - lib/ex_aequo/color/web.rb
48
- - lib/ex_aequo/colors.rb
54
+ - lib/ex_aequo/colorize.rb
55
+ - lib/ex_aequo/colorize/color_definitions.rb
56
+ - lib/ex_aequo/colorizer.rb
49
57
  - lib/ex_aequo/kernel.rb
50
58
  - lib/ex_aequo/kernel/access.rb
59
+ - lib/ex_aequo/kernel/enumerable.rb
51
60
  - lib/ex_aequo/kernel/fn.rb
61
+ - lib/ex_aequo/kernel/match_data.rb
52
62
  - lib/ex_aequo/my_struct.rb
53
63
  - lib/ex_aequo/my_struct/class_methods.rb
54
64
  - lib/ex_aequo/tools/text_scanner.rb
@@ -65,14 +75,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
75
  requirements:
66
76
  - - ">="
67
77
  - !ruby/object:Gem::Version
68
- version: 3.1.0
78
+ version: 3.3.0
69
79
  required_rubygems_version: !ruby/object:Gem::Requirement
70
80
  requirements:
71
81
  - - ">="
72
82
  - !ruby/object:Gem::Version
73
83
  version: '0'
74
84
  requirements: []
75
- rubygems_version: 3.3.26
85
+ rubygems_version: 3.5.16
76
86
  signing_key:
77
87
  specification_version: 4
78
88
  summary: Some tools
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'modifiers'
4
- module ExAequo
5
- module Color
6
- module Ansi
7
- extend self
8
- include ExAequo::Color::Modifiers
9
-
10
- AnsiColorEscape = {
11
- black: 30,
12
- red: 31,
13
- green: 32,
14
- yellow: 33,
15
- blue: 34,
16
- magenta: 35,
17
- cyan: 36,
18
- white: 37
19
- }.freeze
20
-
21
- def ansi(name, bold: false, dim: false, italic: false, underline: false)
22
- case AnsiColorEscape.fetch(name.to_s.downcase.to_sym, nil)
23
- in nil
24
- raise IllegalColor, "#{name} is not one of the 8 legal basic ansi color names: #{_legal_ansi_color_names}"
25
- in value
26
- "\e[#{value}#{postfix_modifiers(bold:, dim:, italic:, underline:)}m"
27
- end
28
- end
29
-
30
- private
31
-
32
- def _legal_ansi_color_names
33
- AnsiColorEscape.keys.inspect
34
- end
35
- end
36
- end
37
- end
38
- # SPDX-License-Identifier: Apache-2.0
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'modifiers'
4
- module ExAequo
5
- module Color
6
- module Ansi256
7
- extend self
8
- include ExAequo::Color::Modifiers
9
-
10
- def ansi256(color, bold: false, dim: false, italic: false, underline: false)
11
- case color
12
- in 0..255
13
- "\e[38;5;#{color}#{postfix_modifiers(bold:, dim:, italic:, underline:)}m"
14
- else
15
- raise IllegalColor, "#{color.inspect} is not a color number between 0 and 255"
16
- end
17
- end
18
- end
19
- end
20
- end
21
- # SPDX-License-Identifier: Apache-2.0
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ExAequo
4
- module Color
5
- module Colorizer
6
- extend self
7
-
8
- ColorMethodKeywords = {
9
- ansi: nil,
10
- ansi256: nil,
11
- rgb: nil,
12
- web: nil
13
- }.freeze
14
-
15
- StyleKeywords = {
16
- bold: nil,
17
- dim: nil,
18
- italic: nil,
19
- underline: nil
20
- }.freeze
21
-
22
- ColorizeKeywords = ColorMethodKeywords.merge(StyleKeywords).merge(reset: true)
23
-
24
- def colorize(text, **kwds)
25
- kwds = ColorizeKeywords.merge(kwds)
26
- _check_args!(kwds)
27
-
28
- [
29
- _color_code(**kwds),
30
- text,
31
- _maybe_reset(kwds[:reset])
32
- ].join
33
- end
34
-
35
- private
36
-
37
- def _check_args!(kwds)
38
- spurious = kwds.keys - ColorizeKeywords.keys
39
- raise ArgumentError, "illegal keywords #{spurious}, allowed: #{ColorizeKeywords.keys}" unless spurious.empty?
40
-
41
- _check_rgb_args!(kwds)
42
- end
43
-
44
- def _check_rgb_args!(kwds)
45
- unless kwds.values_at(*ColorMethodKeywords.keys).compact.size == 1
46
- raise ArgumentError, 'need to specify exactly one of the following keyword arguments: :ansi, :ansi256, :rgb, :web'
47
- end
48
-
49
- if kwds[:rgb] && Access.any_key?(kwds, :bold, :dim)
50
- raise(
51
- ArgumentError,
52
- 'specifying bold and/or dim with rgb does not make sense'
53
- )
54
- end
55
- end
56
-
57
- def _color_code(**kwds)
58
- kwds => {ansi:, ansi256:, rgb:, web:, italic:, underline:}
59
- if rgb
60
- ExAequo::Color.rgb(*Array(rgb), italic:, underline:)
61
- elsif web
62
- ExAequo::Color.rgb(*ExAequo::Color::Web.to_rgb(web), italic:, underline:)
63
- elsif ansi
64
- ExAequo::Color.ansi(ansi, **kwds.slice(*StyleKeywords.keys))
65
- else
66
- ExAequo::Color.ansi256(ansi256, **kwds.slice(*StyleKeywords.keys))
67
- end
68
- end
69
-
70
- def _maybe_reset(reset)
71
- reset ? ExAequo::Color.reset : nil
72
- end
73
- end
74
- end
75
- end
76
- # SPDX-License-Identifier: Apache-2.0
@@ -1,27 +0,0 @@
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,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'modifiers'
4
- module ExAequo
5
- module Color
6
- module Rgb
7
- extend self
8
-
9
- def rgb(red, green = nil, blue = nil, **kwds)
10
- if green && blue
11
- _rgb(red, green, blue, **kwds)
12
- else
13
- raise ArgumentError, 'takes 1 or 3 parameters, given two' if green
14
-
15
- _rgb(*_hex_to_triple(red), **kwds)
16
- end
17
- end
18
-
19
- private
20
-
21
- def _check_rgb(red, green, blue)
22
- if _check_rgb_byte(red) && _check_rgb_byte(green) && _check_rgb_byte(blue)
23
- :ok
24
- else
25
- "#{[red, green, blue]} is not a legal rgb specification, need three bytes (0..255)"
26
- end
27
- end
28
-
29
- def _check_rgb_byte(byte)
30
- case byte
31
- in 0..255
32
- true
33
- else
34
- false
35
- end
36
- end
37
-
38
- LeadingHashRgx = %r{\A#}
39
- def _hex_to_triple(hex)
40
- chex = hex.sub(LeadingHashRgx, '')
41
- case chex.grapheme_clusters.each_slice(2).map(&:join).map { Integer(_1, 16) }
42
- in r, g, b
43
- [r, g, b]
44
- else
45
- raise IllegalColor, "#{hex} is not a legal rgb hex string"
46
- end
47
- rescue ArgumentError
48
- raise IllegalColor, "#{hex} is not a legal rgb hex string"
49
- end
50
-
51
- def _rgb(red, green, blue, italic: false, underline: false)
52
- case _check_rgb(red, green, blue)
53
- in :ok
54
- modifier = ExAequo::Color::Modifiers.postfix_modifiers(italic:, underline:)
55
- "\e[38;2;#{red};#{green};#{blue}#{modifier}m"
56
- in message
57
- raise IllegalColor, message
58
- end
59
- end
60
- end
61
- end
62
- end
63
- # SPDX-License-Identifier: Apache-2.0
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../color'
4
- module ExAequo
5
- module Color
6
-
7
- module Text extend self
8
- Specials = {
9
- bold: ExAequo::Color::Ansi.ansi(:white, bold: true),
10
- eol: "\n",
11
- reset: ExAequo::Color.reset
12
- }
13
-
14
- def put_col(*segments, to: $stdout)
15
- to.puts(colorized_text(segments))
16
- end
17
-
18
- def colorized_text(*segments)
19
- if ENV['NO_COLOR']
20
- segments.flatten.filter { String === _1 }.join
21
- else
22
- segments.flatten.map(&_color_or_text).join
23
- end
24
- end
25
-
26
- private
27
-
28
-
29
- def _color_or_text
30
- -> color_or_text do
31
- case color_or_text
32
- when Symbol
33
- _colorize(color_or_text)
34
- else
35
- color_or_text
36
- end
37
- end
38
- end
39
-
40
- def _colorize(color)
41
- case ExAequo::Color::Ansi::AnsiColorEscape[color]
42
- when nil
43
- Specials.fetch(color) { raise ArgumentError, "#{color} not yet implemented" }
44
- else
45
- ExAequo::Color::Ansi.ansi(color)
46
- end
47
- end
48
- end
49
- end
50
- end
51
- # SPDX-License-Identifier: Apache-2.0
@@ -1,165 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ExAequo
4
- module Color
5
- module Web
6
- extend self
7
-
8
- WebColorNames = {
9
- 'aliceblue' => [240, 248, 255],
10
- 'antiquewhite' => [250, 235, 215],
11
- 'aqua' => [0, 255, 255],
12
- 'aquamarine' => [127, 255, 212],
13
- 'azure' => [240, 255, 255],
14
- 'beige' => [245, 245, 220],
15
- 'bisque' => [255, 228, 196],
16
- 'black' => [0, 0, 0],
17
- 'blanchedalmond' => [255, 235, 205],
18
- 'blue' => [0, 0, 255],
19
- 'blueviolet' => [138, 43, 226],
20
- 'brown' => [165, 42, 42],
21
- 'burlywood' => [222, 184, 135],
22
- 'cadetblue' => [95, 158, 160],
23
- 'chartreuse' => [127, 255, 0],
24
- 'chocolate' => [210, 105, 30],
25
- 'coral' => [255, 127, 80],
26
- 'cornflowerblue' => [100, 149, 237],
27
- 'cornsilk' => [255, 248, 220],
28
- 'crimson' => [220, 20, 60],
29
- 'cyan' => [0, 255, 255],
30
- 'darkblue' => [0, 0, 139],
31
- 'darkcyan' => [0, 139, 139],
32
- 'darkgoldenrod' => [184, 134, 11],
33
- 'darkgray' => [169, 169, 169],
34
- 'darkgreen' => [0, 100, 0],
35
- 'darkgrey' => [169, 169, 169],
36
- 'darkkhaki' => [189, 183, 107],
37
- 'darkmagenta' => [139, 0, 139],
38
- 'darkolivegreen' => [85, 107, 47],
39
- 'darkorange' => [255, 140, 0],
40
- 'darkorchid' => [153, 50, 204],
41
- 'darkred' => [139, 0, 0],
42
- 'darksalmon' => [233, 150, 122],
43
- 'darkseagreen' => [143, 188, 143],
44
- 'darkslateblue' => [72, 61, 139],
45
- 'darkslategray' => [47, 79, 79],
46
- 'darkslategrey' => [47, 79, 79],
47
- 'darkturquoise' => [0, 206, 209],
48
- 'darkviolet' => [148, 0, 211],
49
- 'deeppink' => [255, 20, 147],
50
- 'deepskyblue' => [0, 191, 255],
51
- 'dimgray' => [105, 105, 105],
52
- 'dimgrey' => [105, 105, 105],
53
- 'dodgerblue' => [30, 144, 255],
54
- 'firebrick' => [178, 34, 34],
55
- 'floralwhite' => [255, 250, 240],
56
- 'forestgreen' => [34, 139, 34],
57
- 'fuchsia' => [255, 0, 255],
58
- 'gainsboro' => [220, 220, 220],
59
- 'ghostwhite' => [248, 248, 255],
60
- 'gold' => [255, 215, 0],
61
- 'goldenrod' => [218, 165, 32],
62
- 'gray' => [128, 128, 128],
63
- 'green' => [0, 128, 0],
64
- 'greenyellow' => [173, 255, 47],
65
- 'grey' => [128, 128, 128],
66
- 'honeydew' => [240, 255, 240],
67
- 'hotpink' => [255, 105, 180],
68
- 'indianred' => [205, 92, 92],
69
- 'indigo' => [75, 0, 130],
70
- 'ivory' => [255, 255, 240],
71
- 'khaki' => [240, 230, 140],
72
- 'lavender' => [230, 230, 250],
73
- 'lavenderblush' => [255, 240, 245],
74
- 'lawngreen' => [124, 252, 0],
75
- 'lemonchiffon' => [255, 250, 205],
76
- 'lightblue' => [173, 216, 230],
77
- 'lightcoral' => [240, 128, 128],
78
- 'lightcyan' => [224, 255, 255],
79
- 'lightgoldenrodyellow' => [250, 250, 210],
80
- 'lightgray' => [211, 211, 211],
81
- 'lightgreen' => [144, 238, 144],
82
- 'lightgrey' => [211, 211, 211],
83
- 'lightpink' => [255, 182, 193],
84
- 'lightsalmon' => [255, 160, 122],
85
- 'lightseagreen' => [32, 178, 170],
86
- 'lightskyblue' => [135, 206, 250],
87
- 'lightslategray' => [119, 136, 153],
88
- 'lightslategrey' => [119, 136, 153],
89
- 'lightsteelblue' => [176, 196, 222],
90
- 'lightyellow' => [255, 255, 224],
91
- 'lime' => [0, 255, 0],
92
- 'limegreen' => [50, 205, 50],
93
- 'linen' => [250, 240, 230],
94
- 'magenta' => [255, 0, 255],
95
- 'maroon' => [128, 0, 0],
96
- 'mediumaquamarine' => [102, 205, 170],
97
- 'mediumblue' => [0, 0, 205],
98
- 'mediumorchid' => [186, 85, 211],
99
- 'mediumpurple' => [147, 112, 219],
100
- 'mediumseagreen' => [60, 179, 113],
101
- 'mediumslateblue' => [123, 104, 238],
102
- 'mediumspringgreen' => [0, 250, 154],
103
- 'mediumturquoise' => [72, 209, 204],
104
- 'mediumvioletred' => [199, 21, 133],
105
- 'midnightblue' => [25, 25, 112],
106
- 'mintcream' => [245, 255, 250],
107
- 'mistyrose' => [255, 228, 225],
108
- 'moccasin' => [255, 228, 181],
109
- 'navajowhite' => [255, 222, 173],
110
- 'navy' => [0, 0, 128],
111
- 'oldlace' => [253, 245, 230],
112
- 'olive' => [128, 128, 0],
113
- 'olivedrab' => [107, 142, 35],
114
- 'orange' => [255, 165, 0],
115
- 'orangered' => [255, 69, 0],
116
- 'orchid' => [218, 112, 214],
117
- 'palegoldenrod' => [238, 232, 170],
118
- 'palegreen' => [152, 251, 152],
119
- 'paleturquoise' => [175, 238, 238],
120
- 'palevioletred' => [219, 112, 147],
121
- 'papayawhip' => [255, 239, 213],
122
- 'peachpuff' => [255, 218, 185],
123
- 'peru' => [205, 133, 63],
124
- 'pink' => [255, 192, 203],
125
- 'plum' => [221, 160, 221],
126
- 'powderblue' => [176, 224, 230],
127
- 'purple' => [128, 0, 128],
128
- 'red' => [255, 0, 0],
129
- 'rosybrown' => [188, 143, 143],
130
- 'royalblue' => [65, 105, 225],
131
- 'saddlebrown' => [139, 69, 19],
132
- 'salmon' => [250, 128, 114],
133
- 'sandybrown' => [244, 164, 96],
134
- 'seagreen' => [46, 139, 87],
135
- 'seashell' => [255, 245, 238],
136
- 'sienna' => [160, 82, 45],
137
- 'silver' => [192, 192, 192],
138
- 'skyblue' => [135, 206, 235],
139
- 'slateblue' => [106, 90, 205],
140
- 'slategray' => [112, 128, 144],
141
- 'slategrey' => [112, 128, 144],
142
- 'snow' => [255, 250, 250],
143
- 'springgreen' => [0, 255, 127],
144
- 'steelblue' => [70, 130, 180],
145
- 'tan' => [210, 180, 140],
146
- 'teal' => [0, 128, 128],
147
- 'thistle' => [216, 191, 216],
148
- 'tomato' => [255, 99, 71],
149
- 'transparent' => [0, 0, 0],
150
- 'turquoise' => [64, 224, 208],
151
- 'violet' => [238, 130, 238],
152
- 'wheat' => [245, 222, 179],
153
- 'white' => [255, 255, 255],
154
- 'whitesmoke' => [245, 245, 245],
155
- 'yellow' => [255, 255, 0],
156
- 'yellowgreen' => [154, 205, 50],
157
- 'rebeccapurple' => [102, 51, 153]
158
- }.freeze
159
- def to_rgb(color)
160
- WebColorNames.fetch(color.to_s.downcase) { raise ArgumentError, "unsupported web color: #{color}" }
161
- end
162
- end
163
- end
164
- end
165
- # SPDX-License-Identifier: Apache-2.0
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'kernel/access'
4
- require_relative 'kernel/fn'
5
-
6
- require_relative 'color/ansi'
7
- require_relative 'color/ansi256'
8
- require_relative 'color/rgb'
9
- require_relative 'color/web'
10
-
11
- require_relative 'color/colorizer'
12
-
13
- module ExAequo
14
- module Color
15
- extend self
16
-
17
- class IllegalColor < RuntimeError; end
18
-
19
- def ansi(color, **kwds)
20
- ExAequo::Color::Ansi.ansi(color, **kwds)
21
- end
22
-
23
- def ansi256(color, **kwds)
24
- ExAequo::Color::Ansi256.ansi256(color, **kwds)
25
- end
26
-
27
- def colorize(text, **params)
28
- if ENV['NO_COLOR']
29
- text
30
- else
31
- ExAequo::Color::Colorizer.colorize(text, **params)
32
- end
33
- end
34
-
35
- def reset
36
- "\e[0m"
37
- end
38
-
39
- def rgb(*args, **kwds)
40
- ExAequo::Color::Rgb.rgb(*args, **kwds)
41
- end
42
- end
43
- end
44
- # SPDX-License-Identifier: Apache-2.0
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'color/colorizer'
4
- module ExAequo
5
- module Colors
6
- extend self
7
-
8
- def ansi(text, ansi, **kwds)
9
- ExAequo::Color::Colorizer.colorize(text, ansi:, **kwds)
10
- end
11
-
12
- def ansi256(text, ansi256, **kwds)
13
- ExAequo::Color::Colorizer.colorize(text, ansi256:, **kwds)
14
- end
15
-
16
- def rgb(text, *args, **kwds)
17
- if args.size == 1
18
- ExAequo::Color::Colorizer.colorize(text, rgb: args.first, **kwds)
19
- else
20
- ExAequo::Color::Colorizer.colorize(text, rgb: args, **kwds)
21
- end
22
- end
23
-
24
- def method_missing(name, text, **kwds)
25
- ExAequo::Color::Colorizer.colorize(text, web: name, **kwds)
26
- end
27
- end
28
- end
29
- # SPDX-License-Identifier: Apache-2.0