Class: Gitlab::Ci::Ansi2json::Parser
- Inherits:
-
Object
- Object
- Gitlab::Ci::Ansi2json::Parser
- Defined in:
- lib/gitlab/ci/ansi2json/parser.rb
Constant Summary collapse
- COLOR =
keys represent the trailing digit in color changing command (30-37, 40-47, 90-97. 100-107)
{ 0 => 'black', # Note: This is gray in the intense color table. 1 => 'red', 2 => 'green', 3 => 'yellow', 4 => 'blue', 5 => 'magenta', 6 => 'cyan', 7 => 'white' # Note: This is gray in the dark (aka default) color table. }.freeze
- STYLE_SWITCHES =
{ bold: 0x01, italic: 0x02, underline: 0x04, conceal: 0x08, cross: 0x10 }.freeze
Class Method Summary collapse
Instance Method Summary collapse
- #bg_color(color_index, prefix = nil) ⇒ Object
- #bg_color_256(command_stack) ⇒ Object
- #changes ⇒ Object
- #color_class(segments) ⇒ Object
-
#fg_color(color_index, prefix = nil) ⇒ Object
rubocop:enable Style/SingleLineMethods.
- #fg_color_256(command_stack) ⇒ Object
-
#initialize(command, ansi_stack = nil) ⇒ Parser
constructor
A new instance of Parser.
-
#on_0(_) ⇒ Object
rubocop:disable Style/SingleLineMethods.
- #on_1(_) ⇒ Object
- #on_100(_) ⇒ Object
- #on_101(_) ⇒ Object
- #on_102(_) ⇒ Object
- #on_103(_) ⇒ Object
- #on_104(_) ⇒ Object
- #on_105(_) ⇒ Object
- #on_106(_) ⇒ Object
- #on_107(_) ⇒ Object
- #on_109(_) ⇒ Object
- #on_21(_) ⇒ Object
- #on_22(_) ⇒ Object
- #on_23(_) ⇒ Object
- #on_24(_) ⇒ Object
- #on_28(_) ⇒ Object
- #on_29(_) ⇒ Object
- #on_3(_) ⇒ Object
- #on_30(_) ⇒ Object
- #on_31(_) ⇒ Object
- #on_32(_) ⇒ Object
- #on_33(_) ⇒ Object
- #on_34(_) ⇒ Object
- #on_35(_) ⇒ Object
- #on_36(_) ⇒ Object
- #on_37(_) ⇒ Object
- #on_38(stack) ⇒ Object
- #on_39(_) ⇒ Object
- #on_4(_) ⇒ Object
- #on_40(_) ⇒ Object
- #on_41(_) ⇒ Object
- #on_42(_) ⇒ Object
- #on_43(_) ⇒ Object
- #on_44(_) ⇒ Object
- #on_45(_) ⇒ Object
- #on_46(_) ⇒ Object
- #on_47(_) ⇒ Object
- #on_48(stack) ⇒ Object
- #on_49(_) ⇒ Object
- #on_8(_) ⇒ Object
- #on_9(_) ⇒ Object
- #on_90(_) ⇒ Object
- #on_91(_) ⇒ Object
- #on_92(_) ⇒ Object
- #on_93(_) ⇒ Object
- #on_94(_) ⇒ Object
- #on_95(_) ⇒ Object
- #on_96(_) ⇒ Object
- #on_97(_) ⇒ Object
- #on_99(_) ⇒ Object
- #term_color_class(color_index, prefix) ⇒ Object
- #xterm_color_class(command_stack, prefix) ⇒ Object
Constructor Details
#initialize(command, ansi_stack = nil) ⇒ Parser
Returns a new instance of Parser.
43 44 45 46 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 43 def initialize(command, ansi_stack = nil) @command = command @ansi_stack = ansi_stack end |
Class Method Details
.bold?(mask) ⇒ Boolean
30 31 32 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 30 def self.bold?(mask) mask & STYLE_SWITCHES[:bold] != 0 end |
.matching_formats(mask) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 34 def self.matching_formats(mask) formats = [] STYLE_SWITCHES.each do |text_format, flag| formats << "term-#{text_format}" if mask & flag != 0 end formats end |
Instance Method Details
#bg_color(color_index, prefix = nil) ⇒ Object
164 165 166 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 164 def bg_color(color_index, prefix = nil) term_color_class(color_index, ['bg', prefix]) end |
#bg_color_256(command_stack) ⇒ Object
168 169 170 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 168 def bg_color_256(command_stack) xterm_color_class(command_stack, 'bg') end |
#changes ⇒ Object
48 49 50 51 52 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 48 def changes if self.respond_to?("on_#{@command}") send("on_#{@command}", @ansi_stack) # rubocop:disable GitlabSecurity/PublicSend end end |
#color_class(segments) ⇒ Object
193 194 195 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 193 def color_class(segments) [segments].flatten.compact.join('-') end |
#fg_color(color_index, prefix = nil) ⇒ Object
rubocop:enable Style/SingleLineMethods
156 157 158 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 156 def fg_color(color_index, prefix = nil) term_color_class(color_index, ['fg', prefix]) end |
#fg_color_256(command_stack) ⇒ Object
160 161 162 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 160 def fg_color_256(command_stack) xterm_color_class(command_stack, 'fg') end |
#on_0(_) ⇒ Object
rubocop:disable Style/SingleLineMethods
55 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 55 def on_0(_) { reset: true } end |
#on_1(_) ⇒ Object
57 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 57 def on_1(_) { enable: STYLE_SWITCHES[:bold] } end |
#on_100(_) ⇒ Object
137 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 137 def on_100(_) { fg: bg_color(0, 'l') } end |
#on_101(_) ⇒ Object
139 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 139 def on_101(_) { fg: bg_color(1, 'l') } end |
#on_102(_) ⇒ Object
141 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 141 def on_102(_) { fg: bg_color(2, 'l') } end |
#on_103(_) ⇒ Object
143 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 143 def on_103(_) { fg: bg_color(3, 'l') } end |
#on_104(_) ⇒ Object
145 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 145 def on_104(_) { fg: bg_color(4, 'l') } end |
#on_105(_) ⇒ Object
147 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 147 def on_105(_) { fg: bg_color(5, 'l') } end |
#on_106(_) ⇒ Object
149 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 149 def on_106(_) { fg: bg_color(6, 'l') } end |
#on_107(_) ⇒ Object
151 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 151 def on_107(_) { fg: bg_color(7, 'l') } end |
#on_109(_) ⇒ Object
153 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 153 def on_109(_) { fg: bg_color(9, 'l') } end |
#on_21(_) ⇒ Object
67 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 67 def on_21(_) { disable: STYLE_SWITCHES[:bold] } end |
#on_22(_) ⇒ Object
69 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 69 def on_22(_) { disable: STYLE_SWITCHES[:bold] } end |
#on_23(_) ⇒ Object
71 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 71 def on_23(_) { disable: STYLE_SWITCHES[:italic] } end |
#on_24(_) ⇒ Object
73 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 73 def on_24(_) { disable: STYLE_SWITCHES[:underline] } end |
#on_28(_) ⇒ Object
75 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 75 def on_28(_) { disable: STYLE_SWITCHES[:conceal] } end |
#on_29(_) ⇒ Object
77 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 77 def on_29(_) { disable: STYLE_SWITCHES[:cross] } end |
#on_3(_) ⇒ Object
59 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 59 def on_3(_) { enable: STYLE_SWITCHES[:italic] } end |
#on_30(_) ⇒ Object
79 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 79 def on_30(_) { fg: fg_color(0) } end |
#on_31(_) ⇒ Object
81 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 81 def on_31(_) { fg: fg_color(1) } end |
#on_32(_) ⇒ Object
83 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 83 def on_32(_) { fg: fg_color(2) } end |
#on_33(_) ⇒ Object
85 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 85 def on_33(_) { fg: fg_color(3) } end |
#on_34(_) ⇒ Object
87 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 87 def on_34(_) { fg: fg_color(4) } end |
#on_35(_) ⇒ Object
89 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 89 def on_35(_) { fg: fg_color(5) } end |
#on_36(_) ⇒ Object
91 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 91 def on_36(_) { fg: fg_color(6) } end |
#on_37(_) ⇒ Object
93 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 93 def on_37(_) { fg: fg_color(7) } end |
#on_38(stack) ⇒ Object
95 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 95 def on_38(stack) { fg: fg_color_256(stack) } end |
#on_39(_) ⇒ Object
97 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 97 def on_39(_) { fg: nil } end |
#on_4(_) ⇒ Object
61 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 61 def on_4(_) { enable: STYLE_SWITCHES[:underline] } end |
#on_40(_) ⇒ Object
99 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 99 def on_40(_) { bg: bg_color(0) } end |
#on_41(_) ⇒ Object
101 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 101 def on_41(_) { bg: bg_color(1) } end |
#on_42(_) ⇒ Object
103 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 103 def on_42(_) { bg: bg_color(2) } end |
#on_43(_) ⇒ Object
105 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 105 def on_43(_) { bg: bg_color(3) } end |
#on_44(_) ⇒ Object
107 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 107 def on_44(_) { bg: bg_color(4) } end |
#on_45(_) ⇒ Object
109 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 109 def on_45(_) { bg: bg_color(5) } end |
#on_46(_) ⇒ Object
111 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 111 def on_46(_) { bg: bg_color(6) } end |
#on_47(_) ⇒ Object
113 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 113 def on_47(_) { bg: bg_color(7) } end |
#on_48(stack) ⇒ Object
115 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 115 def on_48(stack) { bg: bg_color_256(stack) } end |
#on_49(_) ⇒ Object
117 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 117 def on_49(_) { bg: nil } end |
#on_8(_) ⇒ Object
63 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 63 def on_8(_) { enable: STYLE_SWITCHES[:conceal] } end |
#on_9(_) ⇒ Object
65 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 65 def on_9(_) { enable: STYLE_SWITCHES[:cross] } end |
#on_90(_) ⇒ Object
119 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 119 def on_90(_) { fg: fg_color(0, 'l') } end |
#on_91(_) ⇒ Object
121 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 121 def on_91(_) { fg: fg_color(1, 'l') } end |
#on_92(_) ⇒ Object
123 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 123 def on_92(_) { fg: fg_color(2, 'l') } end |
#on_93(_) ⇒ Object
125 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 125 def on_93(_) { fg: fg_color(3, 'l') } end |
#on_94(_) ⇒ Object
127 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 127 def on_94(_) { fg: fg_color(4, 'l') } end |
#on_95(_) ⇒ Object
129 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 129 def on_95(_) { fg: fg_color(5, 'l') } end |
#on_96(_) ⇒ Object
131 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 131 def on_96(_) { fg: fg_color(6, 'l') } end |
#on_97(_) ⇒ Object
133 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 133 def on_97(_) { fg: fg_color(7, 'l') } end |
#on_99(_) ⇒ Object
135 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 135 def on_99(_) { fg: fg_color(9, 'l') } end |
#term_color_class(color_index, prefix) ⇒ Object
172 173 174 175 176 177 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 172 def term_color_class(color_index, prefix) color_name = COLOR[color_index] return if color_name.nil? color_class(['term', prefix, color_name]) end |
#xterm_color_class(command_stack, prefix) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/gitlab/ci/ansi2json/parser.rb', line 179 def xterm_color_class(command_stack, prefix) # the 38 and 48 commands have to be followed by "5" and the color index return unless command_stack.length >= 2 return unless command_stack[0] == "5" command_stack.shift # ignore the "5" command color_index = command_stack.shift.to_i return unless color_index >= 0 return unless color_index <= 255 color_class(["xterm", prefix, color_index]) end |