ansi_sgr_to_html 1.0.0

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.
Files changed (2) hide show
  1. data/lib/ansi_sgr_to_html.rb +457 -0
  2. metadata +50 -0
@@ -0,0 +1,457 @@
1
+ # This is generated by ragel - write me a mail if you are interested in the main source.
2
+ # Its not included, currently, as I dont want the gem to depend on ragel, for installation.
3
+ class ANSI_SGR_To_HTML
4
+ @@HTML_escapes = {'&'=>'&amp;','"'=>'&quot;','<'=>'&lt;','>'=>'&gt;',"\r"=>"\r","\n"=>"\n"} # newlines controlled by option
5
+ @@Col_tab_256 = [
6
+ '000000','800000','008000','808000','000080','800080','008080','c0c0c0',
7
+ '808080','ff0000','00ff00','ffff00','0000ff','ff00ff','00ffff','ffffff',
8
+ '000000','00005f','000087','0000af','0000df','0000ff','005f00','005f5f',
9
+ '005f87','005faf','005fdf','005fff','008700','00875f','008787','0087af',
10
+ '0087df','0087ff','00af00','00af5f','00af87','00afaf','00afdf','00afff',
11
+ '00df00','00df5f','00df87','00dfaf','00dfdf','00dfff','00ff00','00ff5f',
12
+ '00ff87','00ffaf','00ffdf','00ffff','5f0000','5f005f','5f0087','5f00af',
13
+ '5f00df','5f00ff','5f5f00','5f5f5f','5f5f87','5f5faf','5f5fdf','5f5fff',
14
+ '5f8700','5f875f','5f8787','5f87af','5f87df','5f87ff','5faf00','5faf5f',
15
+ '5faf87','5fafaf','5fafdf','5fafff','5fdf00','5fdf5f','5fdf87','5fdfaf',
16
+ '5fdfdf','5fdfff','5fff00','5fff5f','5fff87','5fffaf','5fffdf','5fffff',
17
+ '870000','87005f','870087','8700af','8700df','8700ff','875f00','875f5f',
18
+ '875f87','875faf','875fdf','875fff','878700','87875f','878787','8787af',
19
+ '8787df','8787ff','87af00','87af5f','87af87','87afaf','87afdf','87afff',
20
+ '87df00','87df5f','87df87','87dfaf','87dfdf','87dfff','87ff00','87ff5f',
21
+ '87ff87','87ffaf','87ffdf','87ffff','af0000','af005f','af0087','af00af',
22
+ 'af00df','af00ff','af5f00','af5f5f','af5f87','af5faf','af5fdf','af5fff',
23
+ 'af8700','af875f','af8787','af87af','af87df','af87ff','afaf00','afaf5f',
24
+ 'afaf87','afafaf','afafdf','afafff','afdf00','afdf5f','afdf87','afdfaf',
25
+ 'afdfdf','afdfff','afff00','afff5f','afff87','afffaf','afffdf','afffff',
26
+ 'df0000','df005f','df0087','df00af','df00df','df00ff','df5f00','df5f5f',
27
+ 'df5f87','df5faf','df5fdf','df5fff','df8700','df875f','df8787','df87af',
28
+ 'df87df','df87ff','dfaf00','dfaf5f','dfaf87','dfafaf','dfafdf','dfafff',
29
+ 'dfdf00','dfdf5f','dfdf87','dfdfaf','dfdfdf','dfdfff','dfff00','dfff5f',
30
+ 'dfff87','dfffaf','dfffdf','dfffff','ff0000','ff005f','ff0087','ff00af',
31
+ 'ff00df','ff00ff','ff5f00','ff5f5f','ff5f87','ff5faf','ff5fdf','ff5fff',
32
+ 'ff8700','ff875f','ff8787','ff87af','ff87df','ff87ff','ffaf00','ffaf5f',
33
+ 'ffaf87','ffafaf','ffafdf','ffafff','ffdf00','ffdf5f','ffdf87','ffdfaf',
34
+ 'ffdfdf','ffdfff','ffff00','ffff5f','ffff87','ffffaf','ffffdf','ffffff',
35
+ '080808','121212','1c1c1c','262626','303030','3a3a3a','444444','4e4e4e',
36
+ '585858','606060','666666','767676','808080','8a8a8a','949494','9e9e9e',
37
+ 'a8a8a8','b2b2b2','bcbcbc','c6c6c6','d0d0d0','dadada','e4e4e4','eeeeee'
38
+ ]
39
+ @@Col_tabs_16 = {
40
+ :xterm => ['000000', 'CD0000', '00CD00', 'CDCD00', '0000EE', 'CD00CD', '00CDCD', 'E5E5E5', '7F7F7F', 'FF0000', '00FF00', 'FFFF00', '5C5CFF', 'FF00FF', '00FFFF', 'FFFFFF'],
41
+ :vga => ['000000', 'AA0000', '00AA00', 'AA5500', '0000AA', 'AA00AA', '00AAAA', 'AAAAAA', '555555', 'FF5555', '55FF55', 'FFFF55', '5555FF', 'FF55FF', '55FFFF', 'FFFFFF'],
42
+ :cmd => ['000000', '800000', '008000', '808000', '000080', '800080', '008080', 'C0C0C0', '808080', 'FF0000', '00FF00', 'FFFF00', '0000FF', 'FF00FF', '00FFFF', 'FFFFFF'],
43
+ :osx_term => ['000000', 'C23621', '25BC24', 'ADAD27', '492EE1', 'D338D3', '33BBC8', 'CBCCCD', '818383', 'FC391F', '31E722', 'EAEC23', '5833FF', 'F935F8', '14F0F0', 'E9EBEB']
44
+ }
45
+ @@CSS_blink_keyframes = '<style>@keyframes term_blink { 0%,50% { opacity: 1; } 51%,100% { opacity: 0; } }</style>'
46
+ def initialize(font_styles = [nil]*10, k_21_is_double_underline = true, k_1_is_bold_and_bright = true, k_turn_eol_into_br = false, col_tab_16 = :xterm)
47
+ @k_21_is_double_underline = k_21_is_double_underline;
48
+ @k_1_is_bold_and_bright = k_1_is_bold_and_bright;
49
+ @k_turn_eol_into_br = k_turn_eol_into_br;
50
+ col_tab_16 = @@Col_tabs_16[col_tab_16] if(col_tab_16.class == Symbol)
51
+ @locol = col_tab_16[0,8]
52
+ @hicol = col_tab_16[8,8]
53
+ @curcol = @locol
54
+ @font_styles = font_styles
55
+ @html_escapes = @@HTML_escapes.clone
56
+ @html_escapes["\r"], @html_escapes["\n"] = '', '<br/>' if(@k_turn_eol_into_br)
57
+ @prv_css = {}
58
+ @cur_css = {}
59
+ @inv = false # Inverted mode on?
60
+ @putblnk = false # Wrote blink tag keyframes? Guard to write them only once, when needed.
61
+ @fsm_stack = []
62
+ @fsm_top = 0
63
+ class << self
64
+ attr_accessor :_ansi_sgr_to_html_actions
65
+ private :_ansi_sgr_to_html_actions, :_ansi_sgr_to_html_actions=
66
+ end
67
+ self._ansi_sgr_to_html_actions = [
68
+ 0, 1, 0, 1, 1, 1, 2, 1,
69
+ 3, 1, 4, 1, 5, 1, 6, 1,
70
+ 7, 1, 8, 1, 9, 1, 10, 1,
71
+ 11, 1, 12, 1, 13, 1, 14, 1,
72
+ 15, 1, 16, 1, 17, 1, 18, 1,
73
+ 19, 1, 20, 1, 21, 1, 22, 1,
74
+ 23, 1, 24, 1, 25, 1, 26, 1,
75
+ 27, 1, 28, 1, 29, 1, 30, 1,
76
+ 31, 1, 32, 2, 2, 1, 2, 4,
77
+ 1, 2, 6, 1, 2, 8, 1, 2,
78
+ 10, 1, 2, 11, 1, 2, 13, 1,
79
+ 2, 15, 1, 2, 17, 1, 2, 29,
80
+ 1
81
+ ]
82
+ class << self
83
+ attr_accessor :_ansi_sgr_to_html_key_offsets
84
+ private :_ansi_sgr_to_html_key_offsets, :_ansi_sgr_to_html_key_offsets=
85
+ end
86
+ self._ansi_sgr_to_html_key_offsets = [
87
+ 0, 0, 7, 8, 20, 22, 26, 37,
88
+ 49, 55, 56, 58, 59, 63, 66, 67,
89
+ 71, 74, 75, 79, 83, 87, 94, 102,
90
+ 110, 121, 127, 128, 130, 131, 135, 138,
91
+ 144, 147, 148, 152, 156, 167, 178, 181,
92
+ 187, 190, 191, 195
93
+ ]
94
+ class << self
95
+ attr_accessor :_ansi_sgr_to_html_trans_keys
96
+ private :_ansi_sgr_to_html_trans_keys, :_ansi_sgr_to_html_trans_keys=
97
+ end
98
+ self._ansi_sgr_to_html_trans_keys = [
99
+ 10, 13, 27, 34, 38, 60, 62, 91,
100
+ 48, 49, 50, 51, 52, 53, 54, 55,
101
+ 56, 57, 59, 109, 59, 109, 59, 109,
102
+ 48, 57, 49, 50, 51, 52, 53, 54,
103
+ 55, 56, 57, 59, 109, 48, 49, 50,
104
+ 51, 52, 53, 54, 55, 56, 57, 59,
105
+ 109, 56, 57, 59, 109, 48, 55, 59,
106
+ 50, 53, 59, 49, 50, 48, 57, 59,
107
+ 48, 57, 59, 49, 50, 48, 57, 59,
108
+ 48, 57, 59, 49, 50, 48, 57, 59,
109
+ 109, 48, 57, 59, 109, 48, 57, 53,
110
+ 59, 109, 48, 52, 54, 57, 54, 55,
111
+ 56, 57, 59, 109, 48, 53, 54, 55,
112
+ 56, 57, 59, 109, 48, 53, 49, 50,
113
+ 51, 52, 53, 54, 55, 56, 57, 59,
114
+ 109, 56, 57, 59, 109, 48, 55, 59,
115
+ 50, 53, 59, 49, 50, 48, 57, 59,
116
+ 48, 57, 53, 59, 48, 52, 54, 57,
117
+ 59, 48, 53, 59, 49, 50, 48, 57,
118
+ 59, 109, 48, 57, 49, 50, 51, 52,
119
+ 53, 54, 55, 56, 57, 59, 109, 49,
120
+ 50, 51, 52, 53, 54, 55, 56, 57,
121
+ 59, 109, 59, 48, 57, 53, 59, 48,
122
+ 52, 54, 57, 59, 48, 53, 59, 49,
123
+ 50, 48, 57, 10, 13, 27, 34, 38,
124
+ 60, 62, 0
125
+ ]
126
+ class << self
127
+ attr_accessor :_ansi_sgr_to_html_single_lengths
128
+ private :_ansi_sgr_to_html_single_lengths, :_ansi_sgr_to_html_single_lengths=
129
+ end
130
+ self._ansi_sgr_to_html_single_lengths = [
131
+ 0, 7, 1, 12, 2, 2, 11, 12,
132
+ 4, 1, 2, 1, 2, 1, 1, 2,
133
+ 1, 1, 2, 2, 2, 3, 6, 6,
134
+ 11, 4, 1, 2, 1, 2, 1, 2,
135
+ 1, 1, 2, 2, 11, 11, 1, 2,
136
+ 1, 1, 2, 7
137
+ ]
138
+ class << self
139
+ attr_accessor :_ansi_sgr_to_html_range_lengths
140
+ private :_ansi_sgr_to_html_range_lengths, :_ansi_sgr_to_html_range_lengths=
141
+ end
142
+ self._ansi_sgr_to_html_range_lengths = [
143
+ 0, 0, 0, 0, 0, 1, 0, 0,
144
+ 1, 0, 0, 0, 1, 1, 0, 1,
145
+ 1, 0, 1, 1, 1, 2, 1, 1,
146
+ 0, 1, 0, 0, 0, 1, 1, 2,
147
+ 1, 0, 1, 1, 0, 0, 1, 2,
148
+ 1, 0, 1, 0
149
+ ]
150
+ class << self
151
+ attr_accessor :_ansi_sgr_to_html_index_offsets
152
+ private :_ansi_sgr_to_html_index_offsets, :_ansi_sgr_to_html_index_offsets=
153
+ end
154
+ self._ansi_sgr_to_html_index_offsets = [
155
+ 0, 0, 8, 10, 23, 26, 30, 42,
156
+ 55, 61, 63, 66, 68, 72, 75, 77,
157
+ 81, 84, 86, 90, 94, 98, 104, 112,
158
+ 120, 132, 138, 140, 143, 145, 149, 152,
159
+ 157, 160, 162, 166, 170, 182, 194, 197,
160
+ 202, 205, 207, 211
161
+ ]
162
+ class << self
163
+ attr_accessor :_ansi_sgr_to_html_trans_targs
164
+ private :_ansi_sgr_to_html_trans_targs, :_ansi_sgr_to_html_trans_targs=
165
+ end
166
+ self._ansi_sgr_to_html_trans_targs = [
167
+ 43, 43, 2, 43, 43, 43, 43, 1,
168
+ 3, 0, 4, 5, 7, 8, 25, 35,
169
+ 23, 24, 36, 37, 3, 43, 0, 3,
170
+ 43, 0, 3, 43, 6, 0, 5, 7,
171
+ 8, 25, 35, 23, 24, 36, 37, 3,
172
+ 43, 0, 6, 6, 6, 6, 6, 6,
173
+ 6, 6, 6, 6, 3, 43, 0, 9,
174
+ 6, 3, 43, 6, 0, 10, 0, 11,
175
+ 41, 0, 12, 0, 30, 31, 13, 0,
176
+ 15, 14, 0, 15, 0, 38, 39, 16,
177
+ 0, 18, 17, 0, 18, 0, 20, 21,
178
+ 19, 0, 3, 43, 6, 0, 3, 43,
179
+ 19, 0, 22, 3, 43, 19, 6, 0,
180
+ 23, 24, 36, 37, 3, 43, 6, 0,
181
+ 23, 24, 36, 37, 3, 43, 6, 0,
182
+ 5, 7, 8, 25, 35, 23, 24, 36,
183
+ 37, 3, 43, 0, 26, 6, 3, 43,
184
+ 6, 0, 27, 0, 28, 33, 0, 29,
185
+ 0, 30, 31, 13, 0, 15, 13, 0,
186
+ 32, 15, 13, 14, 0, 15, 14, 0,
187
+ 34, 0, 20, 21, 19, 0, 3, 43,
188
+ 6, 0, 5, 7, 8, 25, 35, 23,
189
+ 24, 36, 37, 3, 43, 0, 5, 7,
190
+ 8, 25, 35, 23, 24, 36, 37, 3,
191
+ 43, 0, 18, 16, 0, 40, 18, 16,
192
+ 17, 0, 18, 17, 0, 42, 0, 20,
193
+ 21, 19, 0, 43, 43, 2, 43, 43,
194
+ 43, 43, 1, 0
195
+ ]
196
+ class << self
197
+ attr_accessor :_ansi_sgr_to_html_trans_actions
198
+ private :_ansi_sgr_to_html_trans_actions, :_ansi_sgr_to_html_trans_actions=
199
+ end
200
+ self._ansi_sgr_to_html_trans_actions = [
201
+ 61, 61, 1, 61, 61, 61, 61, 63,
202
+ 0, 0, 59, 0, 0, 0, 0, 0,
203
+ 0, 0, 0, 0, 59, 94, 0, 0,
204
+ 3, 0, 5, 67, 55, 0, 0, 0,
205
+ 0, 0, 0, 0, 0, 0, 0, 0,
206
+ 3, 0, 57, 7, 11, 15, 19, 25,
207
+ 65, 29, 33, 37, 9, 70, 0, 0,
208
+ 51, 13, 73, 39, 0, 0, 0, 0,
209
+ 0, 0, 0, 0, 47, 47, 47, 0,
210
+ 0, 0, 0, 0, 0, 0, 0, 0,
211
+ 0, 0, 0, 0, 0, 0, 0, 0,
212
+ 0, 0, 0, 3, 0, 0, 0, 3,
213
+ 0, 0, 0, 0, 3, 0, 0, 0,
214
+ 0, 0, 0, 0, 0, 3, 0, 0,
215
+ 23, 23, 23, 23, 23, 82, 65, 0,
216
+ 27, 27, 27, 27, 27, 27, 27, 27,
217
+ 27, 27, 85, 0, 0, 53, 17, 76,
218
+ 41, 0, 0, 0, 0, 0, 0, 0,
219
+ 0, 49, 49, 49, 0, 0, 0, 0,
220
+ 0, 0, 0, 0, 0, 0, 0, 0,
221
+ 0, 0, 45, 45, 45, 0, 21, 79,
222
+ 65, 0, 31, 31, 31, 31, 31, 31,
223
+ 31, 31, 31, 31, 88, 0, 35, 35,
224
+ 35, 35, 35, 35, 35, 35, 35, 35,
225
+ 91, 0, 0, 0, 0, 0, 0, 0,
226
+ 0, 0, 0, 0, 0, 0, 0, 43,
227
+ 43, 43, 0, 61, 61, 1, 61, 61,
228
+ 61, 61, 63, 0
229
+ ]
230
+ class << self
231
+ attr_accessor :ansi_sgr_to_html_start
232
+ end
233
+ self.ansi_sgr_to_html_start = 43;
234
+ class << self
235
+ attr_accessor :ansi_sgr_to_html_first_final
236
+ end
237
+ self.ansi_sgr_to_html_first_final = 43;
238
+ class << self
239
+ attr_accessor :ansi_sgr_to_html_error
240
+ end
241
+ self.ansi_sgr_to_html_error = 0;
242
+ class << self
243
+ attr_accessor :ansi_sgr_to_html_en_main
244
+ end
245
+ self.ansi_sgr_to_html_en_main = 43;
246
+ end
247
+ def convert(i, o=nil) # i is string, o can be anything with <<
248
+ o = '' unless o
249
+ begin
250
+ p ||= 0
251
+ pe ||= i.length
252
+ @fsm_cs = ansi_sgr_to_html_start
253
+ end
254
+ begin
255
+ _klen, _trans, _keys, _acts, _nacts = nil
256
+ _goto_level = 0
257
+ _resume = 10
258
+ _eof_trans = 15
259
+ _again = 20
260
+ _test_eof = 30
261
+ _out = 40
262
+ while true
263
+ _trigger_goto = false
264
+ if _goto_level <= 0
265
+ if p == pe
266
+ _goto_level = _test_eof
267
+ next
268
+ end
269
+ if @fsm_cs == 0
270
+ _goto_level = _out
271
+ next
272
+ end
273
+ end
274
+ if _goto_level <= _resume
275
+ _keys = _ansi_sgr_to_html_key_offsets[ @fsm_cs]
276
+ _trans = _ansi_sgr_to_html_index_offsets[ @fsm_cs]
277
+ _klen = _ansi_sgr_to_html_single_lengths[ @fsm_cs]
278
+ _break_match = false
279
+ begin
280
+ if _klen > 0
281
+ _lower = _keys
282
+ _upper = _keys + _klen - 1
283
+ loop do
284
+ break if _upper < _lower
285
+ _mid = _lower + ( (_upper - _lower) >> 1 )
286
+ if i[p].ord < _ansi_sgr_to_html_trans_keys[_mid]
287
+ _upper = _mid - 1
288
+ elsif i[p].ord > _ansi_sgr_to_html_trans_keys[_mid]
289
+ _lower = _mid + 1
290
+ else
291
+ _trans += (_mid - _keys)
292
+ _break_match = true
293
+ break
294
+ end
295
+ end # loop
296
+ break if _break_match
297
+ _keys += _klen
298
+ _trans += _klen
299
+ end
300
+ _klen = _ansi_sgr_to_html_range_lengths[ @fsm_cs]
301
+ if _klen > 0
302
+ _lower = _keys
303
+ _upper = _keys + (_klen << 1) - 2
304
+ loop do
305
+ break if _upper < _lower
306
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
307
+ if i[p].ord < _ansi_sgr_to_html_trans_keys[_mid]
308
+ _upper = _mid - 2
309
+ elsif i[p].ord > _ansi_sgr_to_html_trans_keys[_mid+1]
310
+ _lower = _mid + 2
311
+ else
312
+ _trans += ((_mid - _keys) >> 1)
313
+ _break_match = true
314
+ break
315
+ end
316
+ end # loop
317
+ break if _break_match
318
+ _trans += _klen
319
+ end
320
+ end while false
321
+ @fsm_cs = _ansi_sgr_to_html_trans_targs[_trans]
322
+ if _ansi_sgr_to_html_trans_actions[_trans] != 0
323
+ _acts = _ansi_sgr_to_html_trans_actions[_trans]
324
+ _nacts = _ansi_sgr_to_html_actions[_acts]
325
+ _acts += 1
326
+ while _nacts > 0
327
+ _nacts -= 1
328
+ _acts += 1
329
+ case _ansi_sgr_to_html_actions[_acts - 1]
330
+ when 0 then
331
+ begin
332
+ end
333
+ when 1 then
334
+ begin
335
+ if(@cur_css != @prv_css) then o<<('</span>') if(@prv_css != {}); if(!@putblnk && @cur_css['animation']) then @putblnk=true; o<<@@CSS_blink_keyframes; end; o<<('<span style="'+@cur_css.map{|k,v|"#{k}:#{v}" if(v)}.compact.join(';')+'">') if(@cur_css != {}); end; @prv_css = @cur_css.clone; end
336
+ when 2 then
337
+ begin
338
+ @cur_css['font-weight'] = 'bold'; if(@k_1_is_bold_and_bright) then @curcol=@hicol; if(@cur_css['color']) then k = @locol.index(@cur_css['color'][1,6]); @cur_css['color'] = '#'+@curcol[k] if(k); end; end; end
339
+ when 3 then
340
+ begin
341
+ if(@k_21_is_double_underline) then @cur_css.delete('text-decoration'); @cur_css['border-bottom'] = '3px double'; else @cur_css.delete('font-weight'); @curcol = @locol; end; end
342
+ when 4 then
343
+ begin
344
+ @cur_css['font-weight'] = 'lighter'; end
345
+ when 5 then
346
+ begin
347
+ @cur_css.delete('font-weight'); end
348
+ when 6 then
349
+ begin
350
+ @cur_css['font-style'] = 'italic'; end
351
+ when 7 then
352
+ begin
353
+ @cur_css.delete('font-style'); end
354
+ when 8 then
355
+ begin
356
+ @cur_css.delete('border-bottom'); @cur_css['text-decoration'] = 'underline'; end
357
+ when 9 then
358
+ begin
359
+ @cur_css.delete('text-decoration'); @cur_css.delete('border-bottom'); end
360
+ when 10 then
361
+ begin
362
+ @cur_css['animation'] = 'term_blink normal 1.2s infinite ease-in-out'; end
363
+ when 11 then
364
+ begin
365
+ @cur_css['animation'] = 'term_blink normal 0.7s infinite ease-in-out'; end
366
+ when 12 then
367
+ begin
368
+ @cur_css.delete('animation'); end
369
+ when 13 then
370
+ begin
371
+ @cur_css['color'],@cur_css['background-color'] = @cur_css['background-color'],@cur_css['color'] unless(@inv); @inv = true; end
372
+ when 14 then
373
+ begin
374
+ @cur_css['color'],@cur_css['background-color'] = @cur_css['background-color'],@cur_css['color'] if(@inv); @inv = false; end
375
+ when 15 then
376
+ begin
377
+ end
378
+ when 16 then
379
+ begin
380
+ end
381
+ when 17 then
382
+ begin
383
+ @cur_css['text-decoration-line'] = 'line-through'; end
384
+ when 18 then
385
+ begin
386
+ @cur_css.delete('text-decoration-line'); end
387
+ when 19 then
388
+ begin
389
+ @cur_css['color'] = '#'+@curcol[ i[p].ord-0x30]; end
390
+ when 20 then
391
+ begin
392
+ @cur_css['background-color'] = '#'+@locol[ i[p].ord-0x30]; end
393
+ when 21 then
394
+ begin
395
+ @cur_css['color'] = '#'+@@Col_tab_256[i[p,3].to_i]; end
396
+ when 22 then
397
+ begin
398
+ @cur_css['background-color'] = '#'+@@Col_tab_256[i[p,3].to_i]; end
399
+ when 23 then
400
+ begin
401
+ @cur_css['color'] = 'rgb('+i[p,11].match(/(\d+);(\d+);(\d+)/)[1,3].join(',')+')'; end
402
+ when 24 then
403
+ begin
404
+ @cur_css['background-color'] = 'rgb('+i[p,11].match(/(\d+);(\d+);(\d+)/)[1,3].join(',')+')'; end
405
+ when 25 then
406
+ begin
407
+ @cur_css.delete('color'); end
408
+ when 26 then
409
+ begin
410
+ @cur_css.delete('background-color'); end
411
+ when 27 then
412
+ begin
413
+ if( i[p].ord == 0x30) then @cur_css.delete('font-family'); else @cur_css['font-family'] = @font_styles[ i[p].ord-0x30]; end; end
414
+ when 28 then
415
+ begin
416
+ @cur_css['font-family'] = @font_styles[10] end
417
+ when 29 then
418
+ begin
419
+ @cur_css = {}; @curcol = @locol end
420
+ when 30 then
421
+ begin
422
+ o<<(@html_escapes[ i[p].ord.chr]); end
423
+ when 31 then
424
+ begin
425
+ o<<( i[p].ord.chr); end
426
+ when 32 then
427
+ begin
428
+ end
429
+ end # action switch
430
+ end
431
+ end
432
+ if _trigger_goto
433
+ next
434
+ end
435
+ end
436
+ if _goto_level <= _again
437
+ if @fsm_cs == 0
438
+ _goto_level = _out
439
+ next
440
+ end
441
+ p += 1
442
+ if p != pe
443
+ _goto_level = _resume
444
+ next
445
+ end
446
+ end
447
+ if _goto_level <= _test_eof
448
+ end
449
+ if _goto_level <= _out
450
+ break
451
+ end
452
+ end
453
+ end
454
+ o << '</span>' if(@prv_css != {})
455
+ o
456
+ end
457
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ansi_sgr_to_html
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tassilo Philipp
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-01-20 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Converter for complete ANSI SGR codes to HTML. Similar to ansitags gem,
15
+ but smaller output (no nested spans), faster (converts everything in one pass),
16
+ more flexible (init options to specify palette, line ending conversion, etc.) and
17
+ better SGR code support (handles ';'-separated code-sequences, fonts, blink(!) and
18
+ more than 16 colors).
19
+ email: tphilipp@potion-studios.com
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - lib/ansi_sgr_to_html.rb
25
+ homepage:
26
+ licenses:
27
+ - ISC
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.9.1
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 1.8.29
47
+ signing_key:
48
+ specification_version: 3
49
+ summary: Converts strings with ANSI SGR codes to HTML
50
+ test_files: []