class Ansispan

Public Class Methods

convert(str) click to toggle source
# File lib/ansispan.rb, line 13
def self.convert(str)
  @foreground_colors.keys.each do |ansi|
    span = '<span style="color: ' + @foreground_colors[ansi] + '">'
    #
    # `\033[Xm` == `\033[0;Xm` sets foreground color to `X`.
    #

    str = str.gsub(/\033\[#{ansi}m/, span)
      .gsub(/\033\[#{ansi}m/, span)
  end

  #
  # `\033[1m` enables bold font, `\033[22m` disables it
  #
  str = str.gsub(/\033\[1m/, '<b>')
    .gsub(/\033\[22m/, '</b>')


  # Bold colors
  @foreground_colors.keys.each do |ansi|
    span = '<span style="font-weight: bold; color: ' + @foreground_colors[ansi] + '">'
    str = str.gsub(/\033\[1;#{ansi}m/, span)
  end

  # Underline colors
  @foreground_colors.keys.each do |ansi|
    span = '<span style="text-decoration: underline; color: ' + @foreground_colors[ansi] + '">'
    str = str.gsub(/\033\[4;#{ansi}m/, span)
  end
  #
  # `\033[3m` enables italics font, `\033[23m` disables it
  #
  str = str.gsub(/\033\[3m/, '<i>')
    .gsub(/\033\[23m/, '</i>')

  str = str.gsub(/\033\[m/, '</span>');
  str = str.gsub(/\033\[0m/, '</span>');
  return str.gsub(/\033\[39m/, '</span>');
end