在Ruby中带有html标签的ANSI转义码?

时间:2011-02-04 03:59:26

标签: ruby ruby-on-rails-3 colors ansi-escape

有趣的是有built-in ansi escape code in Ruby

a gem还有一个更强大的版本。

不幸的是,这些日志输出到控制台。我的文字显示在页面中,所以我需要HTML标签来包裹我的文字。

你们有任何想法如何去做吗?

2 个答案:

答案 0 :(得分:5)

我想你想要的是从转义字符转换为HTML。

我通过为转义字符假设以下代码/颜色哈希来做了一次:

{ :reset          =>  0,
  :bright         =>  1,
  :dark           =>  2,
  :underline      =>  4,
  :blink          =>  5,
  :negative       =>  7,
  :black          => 30,
  :red            => 31,
  :green          => 32,
  :yellow         => 33,
  :blue           => 34,
  :magenta        => 35,
  :cyan           => 36,
  :white          => 37,
  :back_black     => 40,
  :back_red       => 41,
  :back_green     => 42,
  :back_yellow    => 43,
  :back_blue      => 44,
  :back_magenta   => 45,
  :back_cyan      => 46,
  :back_white     => 47}

我所做的是以下转换(远离无论如何优化):

def escape_to_html(data)
  { 1 => :nothing,
    2 => :nothing,
    4 => :nothing,
    5 => :nothing,
    7 => :nothing,
    30 => :black,
    31 => :red,
    32 => :green,
    33 => :yellow,
    34 => :blue,
    35 => :magenta,
    36 => :cyan,
    37 => :white,
    40 => :nothing,
    41 => :nothing,
    43 => :nothing,
    44 => :nothing,
    45 => :nothing,
    46 => :nothing,
    47 => :nothing,
  }.each do |key, value|
    if value != :nothing
      data.gsub!(/\e\[#{key}m/,"<span style=\"color:#{value}\">")
    else
      data.gsub!(/\e\[#{key}m/,"<span>")
    end
  end
  data.gsub!(/\e\[0m/,'</span>')
  return data
end

嗯,你需要填补我不考虑的颜色或背景的空白。但我想你可以得到这个想法。

希望有所帮助

答案 1 :(得分:2)

感谢您链接到我没见过的很酷的宝石。不过,我认为你所寻找的是层叠样式表(CSS)。因为谷歌搜索会显示互联网上缓存的每个其他页面,这里有一些链接可供您入门:

* SASS是对ruby / rails非常频繁使用的CSS的ruby-ized抽象