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 +7 -0
- data/lib/ansi_escape.rb +18 -0
- data/lib/ansi_escape/string_class.rb +116 -0
- data/lib/ansi_escape/string_instance.rb +62 -0
- data/lib/ansi_escape/version.rb +8 -0
- metadata +93 -0
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
|
data/lib/ansi_escape.rb
ADDED
|
@@ -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
|
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:
|