Merge git://localhost:9002/~ramberg/mwamko/
[mwamko.git] / lib / ansi2html.rb
blobd80fed16df01b3853db995adfbd14a64d46f7263
1 class Ansi2Html
3   def self.convert (ansi_text)
5     @open_tag_count = 0
6     ansi_text.gsub!(/\e\[(.*?)m/) do |i|
7       
8       span_ids = []
9       span_tags = ""
11       i_flags = $1.split(';')
12       i_flags.collect! {|f| f.to_i}
13       
14       ansi_mapping = {
15         
16         # style
17         1 => 'ansi_bold',
18         4 => 'ansi_underline',
19         8 => 'ansi_hidden',
21         # forground
22         30 => 'ansi_black',
23         31 => 'ansi_red',
24         32 => 'ansi_green',
25         33 => 'ansi_yellow',
26         34 => 'ansi_blue',
27         35 => 'ansi_magenta',
28         36 => 'ansi_cyan',
29         37 => 'ansi_white',
31         # background
32         40 => 'ansi_black_bg',
33         41 => 'ansi_red_bg',
34         42 => 'ansi_green_bg',
35         43 => 'ansi_yellow_bg',
36         44 => 'ansi_blue_bg',
37         45 => 'ansi_magenta_bg',
38         46 => 'ansi_cyan_bg',
39         47 => 'ansi_white_bg'
40       }
41       
42       if i_flags.include?(0)
43         span_tags << '</span>' * @open_tag_count
44         @open_tag_count = 0
45       end
46       
47       ansi_mapping.each do |ansi_code, id|
48         span_ids << id if i_flags.include?(ansi_code)
49       end
51       span_tags << span_ids.collect do |t|
52         @open_tag_count = @open_tag_count.next
53         "<span id=\"#{t}\">"
54       end.join
55       
56       span_tags
57     end
59     ansi_text
60   end
61 end