lib/amazing_print/colors.rb
# frozen_string_literal: true module AmazingPrint module Colors module_function # # ANSI color codes: # \e => escape # 30 => color base # 1 => bright # 0 => normal # # For HTML coloring we use <kbd> tag instead of <span> to require monospace # font. Note that beloved <tt> has been removed from HTML5. # %w[gray red green yellow blue purple cyan white].zip( %w[black darkred darkgreen brown navy darkmagenta darkcyan slategray] ).each_with_index do |(color, shade), i| # NOTE: Format strings are created once only, for performance, and remembered by closures. term_bright_seq = "\e[1;#{i + 30}m%s\e[0m" html_bright_seq = %(<kbd style="color:#{color}">%s</kbd>) define_method color do |str, html = false| (html ? html_bright_seq : term_bright_seq) % str end term_normal_seq = "\e[0;#{i + 30}m%s\e[0m" html_normal_seq = %(<kbd style="color:#{shade}">%s</kbd>) define_method "#{color}ish" do |str, html = false| (html ? html_normal_seq : term_normal_seq) % str end end end end