sai 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,380 @@
1
+ # Generated from lib/sai/ansi/sequenced_string.rb with RBS::Inline
2
+
3
+ module Sai
4
+ module ANSI
5
+ # A representation of a ANSI encoded string and its individual {SequencedString::Segment segments}
6
+ #
7
+ # @author {https://aaronmallen.me Aaron Allen}
8
+ # @since 0.3.0
9
+ #
10
+ # @api public
11
+ class SequencedString
12
+ include Enumerable[Segment]
13
+
14
+ def each: () { (Segment) -> void } -> SequencedString
15
+
16
+ def empty?: () -> bool
17
+
18
+ def map: () { (Segment) -> untyped } -> Array[untyped]
19
+
20
+ def size: () -> Integer
21
+
22
+ # Initialize a new instance of SequencedString
23
+ #
24
+ # @author {https://aaronmallen.me Aaron Allen}
25
+ # @since 0.3.0
26
+ #
27
+ # @api private
28
+ #
29
+ # @param string [String] the sequenced string to Segment
30
+ #
31
+ # @return [SequencedString] the new instance of SequencedString
32
+ # @rbs (String string) -> void
33
+ def initialize: (String string) -> void
34
+
35
+ # Fetch a segment by index
36
+ #
37
+ # @author {https://aaronmallen.me Aaron Allen}
38
+ # @since 0.3.0
39
+ #
40
+ # @api public
41
+ #
42
+ # @example
43
+ # string = SequencedString.new("\e[31mred\e[0m")
44
+ # string[0] #=> #<SequencedString::Segment:0x00007f9b3b8b3e10>
45
+ #
46
+ # @param index [Integer] the index of the segment to fetch
47
+ #
48
+ # @return [Segment, nil] the segment at the index
49
+ # @rbs (Integer index) -> Segment?
50
+ def []: (Integer index) -> Segment?
51
+
52
+ # Compare the SequencedString to another object
53
+ #
54
+ # @author {https://aaronmallen.me Aaron Allen}
55
+ # @since 0.3.0
56
+ #
57
+ # @api public
58
+ #
59
+ # @example
60
+ # string = "\e[31mred\e[0m"
61
+ # SequencedString.new(string) == string #=> true
62
+ #
63
+ # @param other [Object] the object to compare to
64
+ #
65
+ # @return [Boolean] `true` if the SequencedString is equal to the other object, `false` otherwise
66
+ # @rbs (untyped other) -> bool
67
+ def ==: (untyped other) -> bool
68
+
69
+ # Combine a sequenced string with another object
70
+ #
71
+ # @author {https://aaronmallen.me Aaron Allen}
72
+ # @since 0.3.0
73
+ #
74
+ # @api public
75
+ #
76
+ # @example
77
+ # sequenced_string = SequencedString.new("\e[31mred\e[0m")
78
+ # sequenced_string + " is a color" #=> "\e[31mred\e[0m is a color"
79
+ #
80
+ # @param other [Object] the object to combine with
81
+ #
82
+ # @return [SequencedString] the combined string
83
+ # @rbs (untyped other) -> SequencedString
84
+ def +: (untyped other) -> SequencedString
85
+
86
+ # Return just the raw text content with **no ANSI sequences**
87
+ #
88
+ # @author {https://aaronmallen.me Aaron Allen}
89
+ # @since 0.3.0
90
+ #
91
+ # @api public
92
+ #
93
+ # @example
94
+ # string = SequencedString.new("Normal \e[31mred\e[0m")
95
+ # string.stripped #=> "Normal red"
96
+ #
97
+ # @return [String] the concatenation of all segment text without color or style
98
+ def stripped: () -> untyped
99
+
100
+ # Return the fully reconstructed string with **all ANSI sequences** (foreground, background, style)
101
+ #
102
+ # @author {https://aaronmallen.me Aaron Allen}
103
+ # @since 0.3.0
104
+ #
105
+ # @api public
106
+ #
107
+ # @example
108
+ # string = SequencedString.new("\e[31mred\e[0m")
109
+ # string.to_s #=> "\e[31mred\e[0m"
110
+ #
111
+ # @return [String]
112
+ def to_s: () -> untyped
113
+
114
+ alias to_str to_s
115
+
116
+ # Return a string with everything except **background** color sequences removed
117
+ #
118
+ # @author {https://aaronmallen.me Aaron Allen}
119
+ # @since 0.3.0
120
+ #
121
+ # @api public
122
+ #
123
+ # @example Remove all background colors
124
+ # string = SequencedString.new("\e[41mBack\e[0m \e[1mBold\e[0m")
125
+ # string.without_background #=> "\e[1mBold\e[0m"
126
+ #
127
+ # @return [SequencedString] new instance with background colors removed
128
+ # @rbs () -> SequencedString
129
+ def without_background: () -> SequencedString
130
+
131
+ # Return a string containing *style* sequences but **no foreground or background colors**
132
+ #
133
+ # @author {https://aaronmallen.me Aaron Allen}
134
+ # @since 0.3.0
135
+ #
136
+ # @api public
137
+ #
138
+ # @example Remove all colors
139
+ # string = SequencedString.new("\e[31mred\e[0m \e[1mbold\e[0m")
140
+ # string.without_color #=> "\e[1mbold\e[0m"
141
+ #
142
+ # @return [SequencedString] new instance with all colors removed
143
+ # @rbs () -> SequencedString
144
+ def without_color: () -> SequencedString
145
+
146
+ # Return a string with everything except **foreground** color sequences removed
147
+ #
148
+ # @author {https://aaronmallen.me Aaron Allen}
149
+ # @since 0.3.0
150
+ #
151
+ # @api public
152
+ #
153
+ # @example Remove all foreground colors
154
+ # string = SequencedString.new("\e[41mBack\e[0m \e[1mBold\e[0m")
155
+ # string.without_foreground #=> "\e[41mBack\e[0m \e[1mBold\e[0m"
156
+ #
157
+ # @return [SequencedString] new instance with foreground colors removed
158
+ # @rbs () -> SequencedString
159
+ def without_foreground: () -> SequencedString
160
+
161
+ # Return a string with specified styles removed
162
+ #
163
+ # @author {https://aaronmallen.me Aaron Allen}
164
+ # @since 0.3.0
165
+ #
166
+ # @api public
167
+ #
168
+ # @example Remove all styles
169
+ # string = SequencedString.new("\e[31mred\e[0m \e[1mbold\e[0m")
170
+ # string.without_style #=> "\e[31mred\e[0m"
171
+ #
172
+ # @example Remove specific style
173
+ # string = SequencedString.new("\e[1;4mBold and Underlined\e[0m")
174
+ # string.without_style(:bold) #=> "\e[4mUnderlined\e[0m"
175
+ #
176
+ # @param styles [Array<Symbol>] specific styles to remove (default: all)
177
+ #
178
+ # @return [SequencedString] new instance with specified styles removed
179
+ def without_style: (*untyped styles) -> untyped
180
+
181
+ private
182
+
183
+ # Build the color sequences for a segment
184
+ #
185
+ # @author {https://aaronmallen.me Aaron Allen}
186
+ # @since 0.3.0
187
+ #
188
+ # @api private
189
+ #
190
+ # @param segment [Segment] the segment to build color sequences for
191
+ # @param skip_background [Boolean] whether to skip background colors
192
+ # @param skip_foreground [Boolean] whether to skip foreground colors
193
+ #
194
+ # @return [Array<String>] the color sequences
195
+ # @rbs (Segment segment, ?skip_background: bool, ?skip_foreground: bool) -> Array[String]
196
+ def build_color_sequences: (Segment segment, ?skip_background: bool, ?skip_foreground: bool) -> Array[String]
197
+
198
+ # Build a string with specified parts skipped
199
+ #
200
+ # @author {https://aaronmallen.me Aaron Allen}
201
+ # @since 0.3.0
202
+ #
203
+ # @api private
204
+ #
205
+ # @param skip_background [Boolean] whether to skip background colors
206
+ # @param skip_foreground [Boolean] whether to skip foreground colors
207
+ # @param skip_styles [Array<Symbol>] styles to skip
208
+ #
209
+ # @return [String] the built string
210
+ # @rbs (?skip_background: bool, ?skip_foreground: bool, ?skip_styles: Array[Symbol]) -> String
211
+ def build_string: (?skip_background: bool, ?skip_foreground: bool, ?skip_styles: Array[Symbol]) -> String
212
+
213
+ # Build the style sequences for a segment
214
+ #
215
+ # @author {https://aaronmallen.me Aaron Allen}
216
+ # @since 0.3.0
217
+ #
218
+ # @api private
219
+ #
220
+ # @param segment [Segment] the segment to build style sequences for
221
+ # @param skip_styles [Array<Symbol>] styles to skip
222
+ #
223
+ # @return [Array<String>] the style sequences
224
+ # @rbs (Segment segment, ?skip_styles: Array[Symbol]) -> Array[String]
225
+ def build_style_sequences: (Segment segment, ?skip_styles: Array[Symbol]) -> Array[String]
226
+
227
+ # A segment of an ANSI encoded string
228
+ #
229
+ # @author {https://aaronmallen.me Aaron Allen}
230
+ # @since 0.3.0
231
+ #
232
+ # @api public
233
+ class Segment
234
+ # The background color sequences for the Segment
235
+ #
236
+ # @author {https://aaronmallen.me Aaron Allen}
237
+ # @since 0.3.0
238
+ #
239
+ # @api public
240
+ #
241
+ # @return [String, nil] the background color sequences
242
+ attr_reader background: String?
243
+
244
+ # The foreground color sequences for the Segment
245
+ #
246
+ # @author {https://aaronmallen.me Aaron Allen}
247
+ # @since 0.3.0
248
+ #
249
+ # @api public
250
+ #
251
+ # @return [String, nil] the foreground color sequences
252
+ attr_reader foreground: String?
253
+
254
+ # The {Location} of the encoded string within the {SequencedString}
255
+ #
256
+ # @author {https://aaronmallen.me Aaron Allen}
257
+ # @since 0.3.0
258
+ #
259
+ # @api public
260
+ #
261
+ # @return [Location] the {Location}
262
+ attr_reader encoded_location: Location
263
+
264
+ alias encoded_loc encoded_location
265
+
266
+ # The {Location} of the encoded string without it's encoding within the {SequencedString}
267
+ #
268
+ # @author {https://aaronmallen.me Aaron Allen}
269
+ # @since 0.3.0
270
+ #
271
+ # @api public
272
+ #
273
+ # @return [Location] the {Location}
274
+ attr_reader stripped_location: Location
275
+
276
+ alias stripped_loc stripped_location
277
+
278
+ # The style sequences (bold, underline, etc...) for the segment
279
+ #
280
+ # @author {https://aaronmallen.me Aaron Allen}
281
+ # @since 0.3.0
282
+ #
283
+ # @api public
284
+ #
285
+ # @return [Array<String>] the style sequences
286
+ attr_reader styles: Array[String]
287
+
288
+ # The raw text of the Segment without any of its ANSI sequences
289
+ #
290
+ # @author {https://aaronmallen.me Aaron Allen}
291
+ # @since 0.3.0
292
+ #
293
+ # @api public
294
+ #
295
+ # @return [String]
296
+ attr_reader text: String
297
+
298
+ # Initialize a new instance of Segment
299
+ #
300
+ # @author {https://aaronmallen.me Aaron Allen}
301
+ # @since 0.3.0
302
+ #
303
+ # @api private
304
+ #
305
+ # @param options [Hash{Symbol => Object}] the options to initialize the Segment with
306
+ # @option options background [String, nil] the Segment {#background}
307
+ # @option options foreground [String, nil] the Segment {#foreground}
308
+ # @option options encoded_end [Integer] the {Location#end_position end_position} of the Segment
309
+ # {#encoded_location}
310
+ # @option options encoded_start [Integer] the {Location#start_position start_position} of the Segment
311
+ # {#encoded_location}
312
+ # @option options stripped_end [Integer] the {Location#end_position end_position} of the Segment
313
+ # {#stripped_location}
314
+ # @option options stripped_start [Integer] the {Location#start_position start_position} of the Segment
315
+ # {#stripped_location}
316
+ # @option options styles [Array<String>] the Segment {#styles}
317
+ # @option options text [String] the Segment {#text}
318
+ #
319
+ # @return [Segment] the new instance of Segment
320
+ # @rbs (
321
+ # ?background: String?,
322
+ # ?foreground: String?,
323
+ # encoded_end: Integer,
324
+ # encoded_start: Integer,
325
+ # stripped_end: Integer,
326
+ # stripped_start: Integer,
327
+ # ?styles: Array[String],
328
+ # text: String
329
+ # ) -> void
330
+ def initialize: (encoded_end: Integer, encoded_start: Integer, stripped_end: Integer, stripped_start: Integer, text: String, ?background: String?, ?foreground: String?, ?styles: Array[String]) -> void
331
+
332
+ # The location of the {Segment} within a {SequencedString}
333
+ #
334
+ # @author {https://aaronmallen.me Aaron Allen}
335
+ # @since 0.3.0
336
+ #
337
+ # @api public
338
+ class Location
339
+ # The ending position of the Location
340
+ #
341
+ # @author {https://aaronmallen.me Aaron Allen}
342
+ # @since 0.3.0
343
+ #
344
+ # @api public
345
+ #
346
+ # @return [Integer] the end position
347
+ attr_reader end_position: Integer
348
+
349
+ alias end_pos end_position
350
+
351
+ # The starting position of the Location
352
+ #
353
+ # @author {https://aaronmallen.me Aaron Allen}
354
+ # @since 0.3.0
355
+ #
356
+ # @api public
357
+ #
358
+ # @return [Integer] the start position
359
+ attr_reader start_position: Integer
360
+
361
+ alias start_pos start_position
362
+
363
+ # Initialize a new instance of Location
364
+ #
365
+ # @author {https://aaronmallen.me Aaron Allen}
366
+ # @since 0.3.0
367
+ #
368
+ # @api private
369
+ #
370
+ # @param end_position [Integer] the {#end_position} of the location
371
+ # @param start_position [Integer] the {#start_position} of the location
372
+ #
373
+ # @return [Location] the new instance of Location
374
+ # @rbs (end_position: Integer, start_position: Integer) -> void
375
+ def initialize: (end_position: Integer, start_position: Integer) -> void
376
+ end
377
+ end
378
+ end
379
+ end
380
+ end
data/sig/sai/ansi.rbs CHANGED
@@ -4,14 +4,14 @@ module Sai
4
4
  # ANSI constants for encoding text styles and colors
5
5
  #
6
6
  # @author {https://aaronmallen.me Aaron Allen}
7
- # @since unreleased
7
+ # @since 0.1.0
8
8
  #
9
9
  # @api private
10
10
  module ANSI
11
11
  # ANSI color code mappings
12
12
  #
13
13
  # @author {https://aaronmallen.me Aaron Allen}
14
- # @since unreleased
14
+ # @since 0.1.0
15
15
  #
16
16
  # @api private
17
17
  #
@@ -21,7 +21,7 @@ module Sai
21
21
  # Standard ANSI color names and their RGB values
22
22
  #
23
23
  # @author {https://aaronmallen.me Aaron Allen}
24
- # @since unreleased
24
+ # @since 0.1.0
25
25
  #
26
26
  # @api private
27
27
  #
@@ -31,7 +31,7 @@ module Sai
31
31
  # ANSI escape sequence for resetting text formatting
32
32
  #
33
33
  # @author {https://aaronmallen.me Aaron Allen}
34
- # @since unreleased
34
+ # @since 0.1.0
35
35
  #
36
36
  # @api private
37
37
  #
@@ -41,7 +41,7 @@ module Sai
41
41
  # Standard ANSI style codes
42
42
  #
43
43
  # @author {https://aaronmallen.me Aaron Allen}
44
- # @since unreleased
44
+ # @since 0.1.0
45
45
  #
46
46
  # @api private
47
47
  #
@@ -5,7 +5,7 @@ module Sai
5
5
  # ANSI escape sequence utilities
6
6
  #
7
7
  # @author {https://aaronmallen.me Aaron Allen}
8
- # @since unreleased
8
+ # @since 0.1.0
9
9
  #
10
10
  # @api private
11
11
  module ColorSequence
@@ -14,7 +14,7 @@ module Sai
14
14
  # Convert a color to the appropriate ANSI escape sequence
15
15
  #
16
16
  # @author {https://aaronmallen.me Aaron Allen}
17
- # @since unreleased
17
+ # @since 0.1.0
18
18
  #
19
19
  # @api private
20
20
  #
@@ -26,10 +26,24 @@ module Sai
26
26
  # @rbs (Array[Integer] | String | Symbol color, Integer mode, ?style_type style_type) -> String
27
27
  def self.resolve: (Array[Integer] | String | Symbol color, Integer mode, ?style_type style_type) -> String
28
28
 
29
+ # Convert RGB values to an 8-bit color sequence
30
+ #
31
+ # @author {https://aaronmallen.me Aaron Allen}
32
+ # @since 0.1.0
33
+ #
34
+ # @api private
35
+ #
36
+ # @param rgb [Array<Integer>] the RGB components
37
+ # @param style_type [Symbol] the type of color (foreground or background)
38
+ #
39
+ # @return [String] the ANSI escape sequence
40
+ # @rbs (Array[Integer] rgb, style_type type) -> String
41
+ private def self.advanced: (Array[Integer] rgb, style_type type) -> String
42
+
29
43
  # Convert RGB values to a 4-bit ANSI color sequence
30
44
  #
31
45
  # @author {https://aaronmallen.me Aaron Allen}
32
- # @since unreleased
46
+ # @since 0.1.0
33
47
  #
34
48
  # @api private
35
49
  #
@@ -43,7 +57,7 @@ module Sai
43
57
  # Convert a base color to a foreground or background sequence
44
58
  #
45
59
  # @author {https://aaronmallen.me Aaron Allen}
46
- # @since unreleased
60
+ # @since 0.1.0
47
61
  #
48
62
  # @api private
49
63
  #
@@ -57,7 +71,7 @@ module Sai
57
71
  # Convert RGB values to a 3-bit basic color sequence
58
72
  #
59
73
  # @author {https://aaronmallen.me Aaron Allen}
60
- # @since unreleased
74
+ # @since 0.1.0
61
75
  #
62
76
  # @api private
63
77
  #
@@ -68,24 +82,10 @@ module Sai
68
82
  # @rbs (Array[Integer] rgb, style_type style_type) -> String
69
83
  private def self.basic: (Array[Integer] rgb, style_type style_type) -> String
70
84
 
71
- # Convert RGB values to an 8-bit color sequence
72
- #
73
- # @author {https://aaronmallen.me Aaron Allen}
74
- # @since unreleased
75
- #
76
- # @api private
77
- #
78
- # @param rgb [Array<Integer>] the RGB components
79
- # @param style_type [Symbol] the type of color (foreground or background)
80
- #
81
- # @return [String] the ANSI escape sequence
82
- # @rbs (Array[Integer] rgb, style_type type) -> String
83
- private def self.bit8: (Array[Integer] rgb, style_type type) -> String
84
-
85
85
  # Convert RGB values to a true color (24-bit) sequence
86
86
  #
87
87
  # @author {https://aaronmallen.me Aaron Allen}
88
- # @since unreleased
88
+ # @since 0.1.0
89
89
  #
90
90
  # @api private
91
91
  #
@@ -99,7 +99,7 @@ module Sai
99
99
  # Validate a color style type
100
100
  #
101
101
  # @author {https://aaronmallen.me Aaron Allen}
102
- # @since unreleased
102
+ # @since 0.1.0
103
103
  #
104
104
  # @api private
105
105
  #
@@ -5,14 +5,14 @@ module Sai
5
5
  # RGB color conversion utilities
6
6
  #
7
7
  # @author {https://aaronmallen.me Aaron Allen}
8
- # @since unreleased
8
+ # @since 0.1.0
9
9
  #
10
10
  # @api private
11
11
  module RGB
12
12
  # Get closest ANSI color for RGB values
13
13
  #
14
14
  # @author {https://aaronmallen.me Aaron Allen}
15
- # @since unreleased
15
+ # @since 0.1.0
16
16
  #
17
17
  # @api private
18
18
  #
@@ -27,7 +27,7 @@ module Sai
27
27
  # Determine if a color is dark
28
28
  #
29
29
  # @author {https://aaronmallen.me Aaron Allen}
30
- # @since unreleased
30
+ # @since 0.1.0
31
31
  #
32
32
  # @api private
33
33
  #
@@ -42,7 +42,7 @@ module Sai
42
42
  # Determine if a color is grayscale
43
43
  #
44
44
  # @author {https://aaronmallen.me Aaron Allen}
45
- # @since unreleased
45
+ # @since 0.1.0
46
46
  #
47
47
  # @api private
48
48
  #
@@ -57,7 +57,7 @@ module Sai
57
57
  # Convert a color value to RGB components
58
58
  #
59
59
  # @author {https://aaronmallen.me Aaron Allen}
60
- # @since unreleased
60
+ # @since 0.1.0
61
61
  #
62
62
  # @api private
63
63
  #
@@ -71,7 +71,7 @@ module Sai
71
71
  # Convert RGB values to 256-color cube index
72
72
  #
73
73
  # @author {https://aaronmallen.me Aaron Allen}
74
- # @since unreleased
74
+ # @since 0.1.0
75
75
  #
76
76
  # @api private
77
77
  #
@@ -84,7 +84,7 @@ module Sai
84
84
  # Convert RGB values to grayscale index
85
85
  #
86
86
  # @author {https://aaronmallen.me Aaron Allen}
87
- # @since unreleased
87
+ # @since 0.1.0
88
88
  #
89
89
  # @api private
90
90
  #
@@ -97,7 +97,7 @@ module Sai
97
97
  # Check if RGB values represent cyan
98
98
  #
99
99
  # @author {https://aaronmallen.me Aaron Allen}
100
- # @since unreleased
100
+ # @since 0.1.0
101
101
  #
102
102
  # @api private
103
103
  #
@@ -112,7 +112,7 @@ module Sai
112
112
  # Convert a hex string to RGB values
113
113
  #
114
114
  # @author {https://aaronmallen.me Aaron Allen}
115
- # @since unreleased
115
+ # @since 0.1.0
116
116
  #
117
117
  # @api private
118
118
  #
@@ -125,7 +125,7 @@ module Sai
125
125
  # Check if RGB values represent magenta
126
126
  #
127
127
  # @author {https://aaronmallen.me Aaron Allen}
128
- # @since unreleased
128
+ # @since 0.1.0
129
129
  #
130
130
  # @api private
131
131
  #
@@ -140,7 +140,7 @@ module Sai
140
140
  # Convert a named color to RGB values
141
141
  #
142
142
  # @author {https://aaronmallen.me Aaron Allen}
143
- # @since unreleased
143
+ # @since 0.1.0
144
144
  #
145
145
  # @api private
146
146
  #
@@ -154,7 +154,7 @@ module Sai
154
154
  # Determine if RGB values represent a primary color
155
155
  #
156
156
  # @author {https://aaronmallen.me Aaron Allen}
157
- # @since unreleased
157
+ # @since 0.1.0
158
158
  #
159
159
  # @api private
160
160
  #
@@ -169,7 +169,7 @@ module Sai
169
169
  # Get the closest primary color
170
170
  #
171
171
  # @author {https://aaronmallen.me Aaron Allen}
172
- # @since unreleased
172
+ # @since 0.1.0
173
173
  #
174
174
  # @api private
175
175
  #
@@ -184,7 +184,7 @@ module Sai
184
184
  # Determine if RGB values represent a secondary color
185
185
  #
186
186
  # @author {https://aaronmallen.me Aaron Allen}
187
- # @since unreleased
187
+ # @since 0.1.0
188
188
  #
189
189
  # @api private
190
190
  #
@@ -199,7 +199,7 @@ module Sai
199
199
  # Get the closest secondary color
200
200
  #
201
201
  # @author {https://aaronmallen.me Aaron Allen}
202
- # @since unreleased
202
+ # @since 0.1.0
203
203
  #
204
204
  # @api private
205
205
  #
@@ -214,7 +214,7 @@ module Sai
214
214
  # Validate RGB values
215
215
  #
216
216
  # @author {https://aaronmallen.me Aaron Allen}
217
- # @since unreleased
217
+ # @since 0.1.0
218
218
  #
219
219
  # @api private
220
220
  #
@@ -227,7 +227,7 @@ module Sai
227
227
  # Check if RGB values represent yellow
228
228
  #
229
229
  # @author {https://aaronmallen.me Aaron Allen}
230
- # @since unreleased
230
+ # @since 0.1.0
231
231
  #
232
232
  # @api private
233
233
  #