ansi_escape 0.0.4

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0a85268209d557a35711345cf6d0a4a48c17c97e
4
+ data.tar.gz: 177de4a490629bde4b18b92cab4334e9ea357c44
5
+ SHA512:
6
+ metadata.gz: d931bcb3282e36f6d2af4e260008292059d4e5afbb64c54d775700b7b0e40a31bcc99024b29fdf40a37e91880aed6dfd67cbbf893a653dd352ab13138db28f74
7
+ data.tar.gz: dcc9be2ebcc7171880c802b25627a25372ede4aed65153111a25416d6ca288f285263551ced7f85257b1ca0c06d37f5b41e3f573a46f4bf1da9b1ce7bad9f36d
@@ -0,0 +1,18 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+ # frozen_string_literal: true
4
+
5
+ # Copyright (c) 2016 Chris Bensler, All Rights Reserved
6
+
7
+ #################################################
8
+
9
+ require_relative 'ansi_escape/string_class'
10
+ require_relative 'ansi_escape/string_instance'
11
+
12
+ # String extension class
13
+ class String
14
+
15
+ extend AnsiEscape::StringClass
16
+ include AnsiEscape::StringInstance
17
+
18
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (c) 2016 Chris Bensler, All Rights Reserved.
3
+
4
+ module AnsiEscape
5
+
6
+ # Extends String class
7
+ module StringClass
8
+
9
+ @@modes = {
10
+ :default => 0,
11
+ :bold => 1,
12
+ :italic => 3,
13
+ :underline => 4,
14
+ :blink => 5,
15
+ :invert => 7,
16
+ :hide => 8,
17
+ :strike => 9,
18
+ }
19
+
20
+ @@fonts = {
21
+ :default => 0,
22
+ :font1 => 1,
23
+ :font2 => 2,
24
+ :font3 => 3,
25
+ :font4 => 4,
26
+ :font5 => 5,
27
+ :font6 => 6,
28
+ :font7 => 7,
29
+ :font8 => 8,
30
+ :font9 => 9,
31
+ }
32
+
33
+ @@colors = {
34
+ :black => 0,
35
+ :red => 1,
36
+ :green => 2,
37
+ :yellow => 3,
38
+ :blue => 4,
39
+ :magenta => 5,
40
+ :cyan => 6,
41
+ :white => 7,
42
+ :default => 9,
43
+ }
44
+
45
+ def modes
46
+ @@modes
47
+ end
48
+
49
+ def fonts
50
+ @@fonts
51
+ end
52
+
53
+ def colors
54
+ @@colors
55
+ end
56
+
57
+ # lookup symbol in hash and convert to code
58
+ def symbol_to_code(symbol_or_code, hash)
59
+ is_sym = (symbol_or_code.is_a? Symbol)
60
+ code = ( is_sym ) ? hash[symbol_or_code] : symbol_or_code
61
+
62
+ if (code.nil? || !hash.value?(code)) then
63
+ raise ArgumentError, get_symbol_to_code_error(symbol_or_code, hash)
64
+ end
65
+
66
+ return code
67
+ end
68
+
69
+ private
70
+
71
+ def get_symbol_to_code_error(symbol_or_code, hash)
72
+ typename = ( symbol_or_code.is_a? Symbol ) ? 'symbol' : 'code'
73
+ symcode = "#{ ( typename == 'symbol' ) ? ':' : '' }#{ symbol_or_code }"
74
+
75
+ errmsg = "Invalid #{ typename } :#{ symbol_or_code }\n"
76
+
77
+ # self.class.indent += 1
78
+ errmsg += " #{ symcode } not found in hash\n"
79
+ errmsg += pretty_hash(hash).gsub(/^/, ' ')
80
+ errmsg += "\n"
81
+ # self.class.indent -= 1
82
+
83
+ return errmsg
84
+ end
85
+
86
+ def pretty_hash(hash)
87
+ str = "{\n"
88
+
89
+ # for alignment
90
+ max = max_hash_symbol_length(hash) + 3
91
+
92
+ # build the formatted hash string
93
+ last = hash.keys[-1]
94
+ hash.each do |symbol, code|
95
+ str += " :#{ symbol }".ljust(max)
96
+ str += " => #{ code }#{ (symbol != last) ? ',' : '' }\n"
97
+ end
98
+
99
+ str += "}\n"
100
+ end
101
+
102
+ # find the max symbol length
103
+ def max_hash_symbol_length(hash)
104
+ max = 0
105
+
106
+ hash.each_key do |symbol|
107
+ size = symbol.to_s.size
108
+ max = size if size > max
109
+ end
110
+
111
+ return max
112
+ end
113
+
114
+ end
115
+
116
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (c) 2016 Chris Bensler, All Rights Reserved.
3
+
4
+ module AnsiEscape
5
+
6
+ # Extends String class
7
+ module StringInstance
8
+
9
+ def mode(symbol_or_code)
10
+ code = symbol_to_code(symbol_or_code, self.class.modes)
11
+
12
+ end_code = code
13
+ end_code = end_code + 20 if code != self.class.modes[:default]
14
+ end_code = end_code + 1 if code == self.class.modes[:bold]
15
+
16
+ "\e[#{ code }m" + self + "\e[#{ end_code };0m"
17
+ end
18
+
19
+ def font(symbol_or_code)
20
+ code = 10 + symbol_to_code(symbol_or_code, self.class.fonts)
21
+ end_code = 10 + self.class.fonts[:default]
22
+ "\e[#{ code }m" + self + "\e[#{ end_code }m"
23
+ end
24
+
25
+ def fgcolor(symbol_or_code)
26
+ code = 30 + symbol_to_code(symbol_or_code, self.class.colors)
27
+ end_code = 30 + self.class.colors[:default]
28
+ safe_code = 30 + self.class.colors[:white]
29
+ "\e[#{ code }m" + self + "\e[#{ safe_code };#{ end_code }m"
30
+ end
31
+
32
+ def bgcolor(symbol_or_code)
33
+ code = 40 + symbol_to_code(symbol_or_code, self.class.colors)
34
+ end_code = 40 + self.class.colors[:default]
35
+ safe_code = 40 + self.class.colors[:black]
36
+ "\e[#{ code }m" + self + "\e[#{ safe_code };#{ end_code }m"
37
+ end
38
+
39
+ # alias for fgcolor()
40
+ def color(symbol_or_code)
41
+ fgcolor(symbol_or_code)
42
+ end
43
+
44
+ # alias for fgcolor()
45
+ def foreground(symbol_or_code)
46
+ fgcolor(symbol_or_code)
47
+ end
48
+
49
+ # alias for bgcolor()
50
+ def background(symbol_or_code)
51
+ bgcolor(symbol_or_code)
52
+ end
53
+
54
+ private
55
+
56
+ def symbol_to_code(symbol_or_code, hash)
57
+ self.class.symbol_to_code(symbol_or_code, hash)
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # Copyright (c) 2016 Chris Bensler, All Rights Reserved.
3
+
4
+ module AnsiEscape
5
+
6
+ VERSION = '0.0.4'
7
+
8
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ansi_escape
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - Chris Bensler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '11.2'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '11.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.42'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.42'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.9'
55
+ description: " Extends the String class to handle basic ANSI escape
56
+ sequences\n without requiring any dependencies.\n \n
57
+ \ Supports: format modes, fonts, colors\n"
58
+ email:
59
+ - chris.bensler@gmail.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - lib/ansi_escape.rb
65
+ - lib/ansi_escape/string_class.rb
66
+ - lib/ansi_escape/string_instance.rb
67
+ - lib/ansi_escape/version.rb
68
+ homepage: https://gitlab.com/Chris.Bensler/ruby.ansi_escape
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '2.0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.6.6
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: Extends the String class to handle ANSI escape sequences.
92
+ test_files: []
93
+ has_rdoc: