ansi_escape 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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: