colora 0.1.240114

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
+ SHA256:
3
+ metadata.gz: a3760588ff62affbf6a8f1c58a95e9d76415d77db9fd9d214a783e51dad1d177
4
+ data.tar.gz: 6422c39bc7dc14d01575da4af643f5029a06f8e7db15a22fff72655ba468b199
5
+ SHA512:
6
+ metadata.gz: 87dcb061cc8f77823edda88f80ad60f3c5abc3bccd199504cbab391c7615853b58e682b04d97b9fa2cee5665dfb9e46b2a8fe35e05184724c984d71526ac5b9b
7
+ data.tar.gz: c17e22167482923f6900ba3e614bdf25cee992496fe789d6a57cc344b0821653b9585cf22ed106960b483c0bac451780bff7035b929b82cdb5d83636cf2b43cd
data/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # Colora
2
+
3
+ * [VERSION 0.1.240114](https://github.com/carlosjhr64/colora/releases)
4
+ * [github](https://www.github.com/carlosjhr64/colora)
5
+ * [rubygems](https://rubygems.org/carlosjhr64/colora)
6
+
7
+ ## DESCRIPTION
8
+
9
+ Colorizes terminal outputs.
10
+
11
+ Uses `Rouge::Formatters::Terminal256` to theme/color output to the terminal.
12
+ Color codes git diff.
13
+
14
+ ## INSTALL
15
+ ```console
16
+ $ gem install colora
17
+ ```
18
+ ## SYNOPSIS
19
+ ```console
20
+ $ colora ./README.md # Color outputs file
21
+ $ cat README.md | colora # Colorizing filter
22
+ $ colora --git lib # Git-diff with target
23
+ $ colora # Git-diff default
24
+ ```
25
+ ## GIT-DIFF FILTERING
26
+
27
+ ![Demo](img/demo.png)
28
+
29
+ Colora will decorate your git-diff output with the following additional flags:
30
+
31
+ * Absent: `*`
32
+ * Deleted: `<`
33
+ * Inserted: `>`
34
+ * Moved/Touched: `t`
35
+ * Edited: `e`
36
+ * Duplicated: `d`
37
+
38
+ The flags are the first three characters of the diff line,
39
+ the first coming from git.
40
+ The second and third refer to the code and comment of the diff line
41
+ (Colora assumes comments as in Ruby).
42
+ One can choose to filter(via command line options) the diff output to:
43
+
44
+ * Filter out context lines(quiet)
45
+ * Just view green(inserted lines)
46
+ * Just view red(deleted lines)
47
+ * Just view edited code or comments
48
+ * Just view duplicated code or comments
49
+
50
+ Additional features:
51
+
52
+ * Swap tabs with tab symbol
53
+ * Switch to a different theme(as provided by Rouge)
54
+
55
+ ## HELP
56
+ ```console
57
+ $ colora --help
58
+ Usage:
59
+ colora [:options+] [<file=FILE>]
60
+ Options:
61
+ -q --quiet
62
+ -g --green Skip red: /^[-<]/
63
+ -r --red Skip green: /^[+>]/
64
+ -c --code Show only new(changed) code
65
+ -C --comment Show only new(changed) comments
66
+ -d --dupcode Show only duplicate code
67
+ -D --dupcomment Show only duplicate comments
68
+ -G --git Run git-diff
69
+ -t --tab Swap tab with ⇥
70
+ --theme=NAME Rouge theme(default: github)
71
+ --lang=NAME Language being diffed(default: ruby)
72
+ Types:
73
+ FILE /^[-\w\.\/]+$/
74
+ NAME /^[\d.a-z_]+$/
75
+ Exclusive:
76
+ green red
77
+ # Notes: #
78
+ When no FILE is given and STDIN in a TTY, git-diff is run.
79
+ Known themes:
80
+ base16 base16.monokai base16.solarized bw
81
+ colorful
82
+ github gruvbox
83
+ igorpro
84
+ magritte molokai monokai monokai.sublime
85
+ pastie
86
+ thankful_eyes tulip
87
+ ```
88
+ ## LICENSE
89
+
90
+ Copyright (c) 2024 CarlosJHR64
91
+
92
+ Permission is hereby granted, free of charge,
93
+ to any person obtaining a copy of this software and
94
+ associated documentation files (the "Software"),
95
+ to deal in the Software without restriction,
96
+ including without limitation the rights
97
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
98
+ copies of the Software, and
99
+ to permit persons to whom the Software is furnished to do so,
100
+ subject to the following conditions:
101
+
102
+ The above copyright notice and this permission notice
103
+ shall be included in all copies or substantial portions of the Software.
104
+
105
+ THE SOFTWARE IS PROVIDED "AS IS",
106
+ WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
107
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
108
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
109
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
110
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
111
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
112
+ THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/bin/colora ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+ require 'colora'
3
+
4
+ def parse_argv
5
+ return nil if ARGV.empty?
6
+
7
+ require 'help_parser'
8
+ HelpParser[Colora::VERSION, <<~HELP]
9
+ Usage:
10
+ colora [:options+] [<file=FILE>]
11
+ Options:
12
+ -q --quiet
13
+ -g --green \t Skip red: /^[-<]/
14
+ -r --red \t Skip green: /^[+>]/
15
+ -c --code \t Show only new(changed) code
16
+ -C --comment \t Show only new(changed) comments
17
+ -d --dupcode \t Show only duplicate code
18
+ -D --dupcomment\t Show only duplicate comments
19
+ -G --git \t Run git-diff
20
+ -t --tab \t Swap tab with ⇥
21
+ --theme=NAME \t Rouge theme(default: github)
22
+ --lang=NAME \t Language being diffed(default: ruby)
23
+ Types:
24
+ FILE /^[-\\w\\.\\/]+$/
25
+ NAME /^[\\d.a-z_]+$/
26
+ Exclusive:
27
+ green red
28
+ # Notes: #
29
+ When no FILE is given and STDIN in a TTY, git-diff is run.
30
+ Known themes:
31
+ base16 base16.monokai base16.solarized bw
32
+ colorful
33
+ github gruvbox
34
+ igorpro
35
+ magritte molokai monokai monokai.sublime
36
+ pastie
37
+ thankful_eyes tulip
38
+ HELP
39
+ end
40
+
41
+ options = parse_argv
42
+ begin
43
+ Colora.run(options)
44
+ rescue Colora::Error => e
45
+ warn e.message
46
+ end
@@ -0,0 +1,40 @@
1
+ module Colora
2
+ Config = OpenStruct.new
3
+
4
+ # Options:
5
+ Config.file = nil
6
+ Config.git = false
7
+ Config.lang = 'ruby'
8
+ Config.theme = 'github'
9
+ Config.tab = false
10
+
11
+ # Filter keys:
12
+ FILTERS = %i[quiet green red code comment dupcode dupcomment]
13
+ FILTERS.each{Config[_1]=false}
14
+
15
+ # Flags colors:
16
+ Config.duplicated_flag = [:default, '#E0FFFF'] # LightCyan
17
+ Config.inserted_flag = [:default, '#ADD8E6'] # LightBlue
18
+ Config.edited_flag = [:default, '#90EE90'] # LightGreen
19
+
20
+ # Comments colors:
21
+ Config.moved_comment = ['#A9A9A9', :default] # DarkGray
22
+ Config.duplicated_comment = ['#008B8B', :default] # DarkCyan
23
+ Config.inserted_comment = ['#00008B', :default] # DarkBlue
24
+ Config.edited_comment = ['#006400', :default] # DarkGreen
25
+
26
+ def self.configure(options)
27
+ # FILE:
28
+ Config.file = options.file if options.file
29
+
30
+ # Options:
31
+ Config.theme = options.theme if options.theme?
32
+ Config.lang = options.lang if options.lang?
33
+ Config.git = options.git?
34
+ Config.tab = options.tab?
35
+
36
+ # Filters:
37
+ # Config.quiet=options.quiet? ...
38
+ FILTERS.each{Config[_1]=options.send("#{_1}?")}
39
+ end
40
+ end
@@ -0,0 +1,83 @@
1
+ module Colora
2
+ class Data
3
+ SPLIT = lambda do |line|
4
+ flag = line[0]
5
+ code, pounds, comment = line[1..].split(/(?<!['"])(\s*#+)(?!{)/, 2)
6
+ code = nil if code.empty?
7
+ comment ? [flag, code, pounds+comment] : [flag, code, nil]
8
+ end
9
+ UPDATE = lambda do |hash, key, flag|
10
+ k = key.strip
11
+ hash[k] = case hash[k]
12
+ when nil
13
+ flag # added(+>) or removed(-<)
14
+ when 'd', 't', flag
15
+ 'd' # duplicate
16
+ else
17
+ 't' # touched
18
+ end
19
+ end
20
+
21
+ def pre_process(line)
22
+ # rubocop:disable Lint/DuplicateBranch
23
+ case line.rstrip
24
+ when '', '+', '-', '---', /^[-+][-+][-+] [ab]/
25
+ line
26
+ when /^[-+<>]/
27
+ flag, code, comment = SPLIT[line]
28
+ f = flag=='-' ? '<' : flag=='+' ? '>' : flag
29
+ UPDATE[@codes, code, f] if code
30
+ UPDATE[@comments, comment, f] if comment
31
+ [flag, code, comment]
32
+ else
33
+ line
34
+ end
35
+ # rubocop:enable Lint/DuplicateBranch
36
+ end
37
+
38
+ attr_reader :lines
39
+
40
+ def initialize(lines)
41
+ @lines,@codes,@comments,@edits = [],{},{},Set.new
42
+ while (line = lines.shift)
43
+ @lines << pre_process(line)
44
+ end
45
+ populate_edits
46
+ @lines.each do |line|
47
+ next unless line.is_a?(Array)
48
+ post_process line
49
+ end
50
+ @codes = @comments = @edits = nil # GC
51
+ end
52
+
53
+ def populate_edits
54
+ partners = []
55
+ jarrow = FuzzyStringMatch::JaroWinkler.create(:pure) # Need pure for UTF-8
56
+ removed = @codes.select{|_,flag| '-<'.include?flag}.keys
57
+ added = @codes.select{|_,flag| '+>'.include?flag}.keys
58
+ short, long = [removed, added].sort_by(&:length)
59
+ short.each do |a|
60
+ long.each do |b|
61
+ d = jarrow.getDistance(a, b)
62
+ partners.push([a, b, d]) if d > 0.618034
63
+ end
64
+ end
65
+ partners.sort_by(&:last).reverse.each do |a, b, _|
66
+ next if @edits.include?(a) || @edits.include?(b)
67
+ @edits.add(a)
68
+ @edits.add(b)
69
+ end
70
+ end
71
+
72
+ def post_process(line)
73
+ if (code = line[1]&.strip)
74
+ flag = @edits.include?(code) ? 'e' : @codes[code]
75
+ line[1] = [flag, line[1]]
76
+ end
77
+ if (comment = line[2]&.strip)
78
+ flag = @comments[comment]
79
+ line[2] = [flag, line[2]]
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,108 @@
1
+ module Colora
2
+ class Lines
3
+ def formatter
4
+ theme = Rouge::Theme.find(Config.theme)
5
+ raise Error, "Unrecognized theme: #{Config.theme}" unless theme
6
+ Rouge::Formatters::Terminal256.new(theme.new)
7
+ end
8
+
9
+ def get_lexer_by_file(file = Config.file)
10
+ return nil unless file && !File.extname(file).empty?
11
+ Rouge::Lexer.guess_by_filename(file)
12
+ end
13
+
14
+ def get_lexer_by_source(source)
15
+ case source
16
+ when /^---/, /^# /
17
+ Rouge::Lexer.guess_by_filename('*.md')
18
+ else
19
+ Rouge::Lexer.guess_by_source(source)
20
+ end
21
+ end
22
+
23
+ def filehandle
24
+ Config.git ? IO.popen("git diff #{Config.file}") :
25
+ Config.file ? File.open(Config.file) :
26
+ $stdin
27
+ end
28
+
29
+ def get_lines(fh = filehandle)
30
+ fh.readlines.map(&:chomp)
31
+ end
32
+
33
+ def initialize
34
+ @formatter = formatter
35
+ lines = get_lines
36
+ @lexer = @orig_lexer = get_lexer_by_file || get_lexer_by_source(lines[0])
37
+ @tag = @lexer.tag
38
+ @lines = @tag=='diff' ? Data.new(lines).lines : lines
39
+ @lang = @orig_lang = Rouge::Lexer.find_fancy(Config.lang)
40
+ @pad0 = ' '
41
+ @pad1 = ' '
42
+ end
43
+
44
+ def to_a = @lines
45
+
46
+ def filtered?(line)
47
+ return false if line.is_a?(String)
48
+
49
+ (Config.green && '-<'.include?(line[0])) ||
50
+ (Config.red && '+>'.include?(line[0])) ||
51
+ (Config.code && [nil,'t'].include?(line.dig 1,0)) ||
52
+ (Config.comment && [nil, 't'].include?(line.dig 2,0)) ||
53
+ (Config.dupcode && line.dig(1,0)=='d') ||
54
+ (Config.dupcomment && line.dig(2,0)=='d') ||
55
+ false
56
+ end
57
+
58
+ def pad(line)
59
+ @pad0+line
60
+ end
61
+
62
+ def flags(line)
63
+ line[0] + (line.dig(1,0)||'*') + (line.dig(2,0)||'*') + @pad1
64
+ end
65
+
66
+ def format(line, color=nil)
67
+ case color
68
+ when nil
69
+ @formatter.format(@lexer.lex(line))
70
+ when :lang
71
+ @formatter.format(@lang.lex(line))
72
+ else
73
+ Paint[line, *color]
74
+ end
75
+ end
76
+
77
+ def reset_lang_by_source(source)
78
+ @lang = Rouge::Lexer.guess_by_source(source)
79
+ end
80
+
81
+ def reset_lang_by_filename(file)
82
+ @lang = Rouge::Lexer.guess_by_filename(file)
83
+ end
84
+
85
+ def reset_lexer(lang=nil)
86
+ @lexer = lang.nil? ? @orig_lexer :
87
+ (Rouge::Lexer.find_fancy(lang) || @orig_lexer)
88
+ end
89
+
90
+ def reset_lang(lang=nil)
91
+ @lang = lang.nil? ? @orig_lang :
92
+ (Rouge::Lexer.find_fancy(lang) || @orig_lang)
93
+ end
94
+
95
+ def each
96
+ @lines.each do |line|
97
+ next if filtered?(line)
98
+
99
+ # Is there a plugin for @tag? If so, use it: Else use the lexer.
100
+ txt = respond_to?(@tag) ? send(@tag, line) :
101
+ @formatter.format(@lexer.lex(line))
102
+ yield txt if txt
103
+ end
104
+ reset_lexer
105
+ reset_lang
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,67 @@
1
+ module Colora
2
+ class Lines
3
+ def diff(line)
4
+ case line
5
+ when String
6
+ case line
7
+ when /^[-+][-+][-+] [ab]\/(.*)$/
8
+ reset_lang_by_filename($~[1])
9
+ format(line)
10
+ when /^\s*#!/
11
+ reset_lang_by_source(line)
12
+ format(line) unless Config.quiet
13
+ when /^ /
14
+ format(pad(line), :lang) unless Config.quiet
15
+ else
16
+ format(line) unless Config.quiet
17
+ end
18
+ else
19
+ # Initialized text variables
20
+ txt = ''
21
+ flags = flags(line)
22
+ code = line.dig(1,1)||''
23
+ comment = line.dig(2,1)||''
24
+ # txt << flags+code
25
+ case line[0]
26
+ when '-', '<'
27
+ txt << format(flags+code+comment)
28
+ comment = '' # will skip commenting below
29
+ when '+', '>'
30
+ case line.dig(1,0)
31
+ when nil, 't'
32
+ txt << format(flags+code)
33
+ when 'd'
34
+ txt << format(flags, Config.dupplicated_flag)
35
+ txt << format(code, :lang)
36
+ when '>'
37
+ txt << format(flags, Config.inserted_flag)
38
+ txt << format(code, :lang)
39
+ when 'e'
40
+ txt << format(flags, Config.edited_flag)
41
+ txt << format(code, :lang)
42
+ else
43
+ warn "Unknown code type: #{line[0]}"
44
+ end
45
+ else
46
+ warn "Unknown line type: #{line[0]}"
47
+ end
48
+ # txt << comment
49
+ unless comment.empty?
50
+ case line.dig(2,0)
51
+ when 't'
52
+ txt << format(comment, Config.moved_comment)
53
+ when 'd'
54
+ txt << format(comment, Config.dupplicated_comment)
55
+ when '>'
56
+ txt << format(comment, Config.inserted_comment)
57
+ when 'e'
58
+ txt << format(comment, Config.edited_comment)
59
+ else
60
+ warn "Unknown comment type: #{line[0]}"
61
+ end
62
+ end
63
+ txt
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,18 @@
1
+ module Colora
2
+ class Lines
3
+ def markdown(line)
4
+ txt = nil
5
+ case line
6
+ when /^```(\w+)$/
7
+ txt = format(line)
8
+ reset_lexer($~[1])
9
+ when /^```$/
10
+ reset_lexer
11
+ txt = format(line)
12
+ else
13
+ txt = format(line)
14
+ end
15
+ txt
16
+ end
17
+ end
18
+ end
data/lib/colora.rb ADDED
@@ -0,0 +1,32 @@
1
+ module Colora
2
+ class Error < RuntimeError; end
3
+ VERSION = '0.1.240114'
4
+
5
+ # Colora.run(options)
6
+ def self.run(options=nil)
7
+ # Standard libraries:
8
+ require 'ostruct'
9
+ # Gems:
10
+ require 'fuzzystringmatch'
11
+ require 'paint'
12
+ require 'rouge'
13
+ # Colora:
14
+ require_relative 'colora/configure'
15
+ require_relative 'colora/data'
16
+ require_relative 'colora/lines'
17
+ # Plugs:
18
+ require_relative 'colora/plugs/diff'
19
+ require_relative 'colora/plugs/markdown'
20
+
21
+ # Configure Colora:
22
+ Colora.configure(options) if options
23
+ # By default, run git-diff:
24
+ Config.git = true if $stdin.tty? && !Config.file
25
+
26
+ # Puts Colora::Lines
27
+ Lines.new.each do |line|
28
+ line.gsub!("\t", '⇥') if Config.tab
29
+ puts line
30
+ end
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,236 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: colora
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.240114
5
+ platform: ruby
6
+ authors:
7
+ - CarlosJHR64
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fuzzy-string-match
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: help_parser
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '8.2'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 8.2.230210
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '8.2'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 8.2.230210
53
+ - !ruby/object:Gem::Dependency
54
+ name: paint
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.3'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.3.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.3'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.3.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: rouge
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '4.2'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 4.2.0
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '4.2'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 4.2.0
93
+ - !ruby/object:Gem::Dependency
94
+ name: colorize
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.1'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.1.0
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.1'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.1.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: cucumber
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '9.1'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 9.1.1
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '9.1'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 9.1.1
133
+ - !ruby/object:Gem::Dependency
134
+ name: parser
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '3.3'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 3.3.0
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '3.3'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 3.3.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.59'
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 1.59.0
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '1.59'
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: 1.59.0
173
+ - !ruby/object:Gem::Dependency
174
+ name: test-unit
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '3.6'
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 3.6.1
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '3.6'
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 3.6.1
193
+ description: |
194
+ Colorizes terminal outputs.
195
+
196
+ Uses `Rouge::Formatters::Terminal256` to theme/color output to the terminal.
197
+ Color codes git diff.
198
+ email: carlosjhr64@gmail.com
199
+ executables:
200
+ - colora
201
+ extensions: []
202
+ extra_rdoc_files: []
203
+ files:
204
+ - README.md
205
+ - bin/colora
206
+ - lib/colora.rb
207
+ - lib/colora/configure.rb
208
+ - lib/colora/data.rb
209
+ - lib/colora/lines.rb
210
+ - lib/colora/plugs/diff.rb
211
+ - lib/colora/plugs/markdown.rb
212
+ homepage: https://github.com/carlosjhr64/colora
213
+ licenses:
214
+ - MIT
215
+ metadata: {}
216
+ post_install_message:
217
+ rdoc_options: []
218
+ require_paths:
219
+ - lib
220
+ required_ruby_version: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ required_rubygems_version: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ requirements:
231
+ - 'git: 2.30'
232
+ rubygems_version: 3.5.4
233
+ signing_key:
234
+ specification_version: 4
235
+ summary: Colorizes terminal outputs.
236
+ test_files: []