lib/amazing_print/core_ext/string.rb
# frozen_string_literal: true # Copyright (c) 2010-2016 Michael Dvorkin and contributors # # AmazingPrint is freely distributable under the terms of MIT license. # See LICENSE file or http://www.opensource.org/licenses/mit-license.php #------------------------------------------------------------------------------ # frozen_string_literal: true class String # # 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;#{30 + i}m%s\e[0m" html_bright_seq = %(<kbd style="color:#{color}">%s</kbd>) define_method color do |html = false, *| (html ? html_bright_seq : term_bright_seq) % self end term_normal_seq = "\e[0;#{30 + i}m%s\e[0m" html_normal_seq = %(<kbd style="color:#{shade}">%s</kbd>) define_method "#{color}ish" do |html = false, *| (html ? html_normal_seq : term_normal_seq) % self end end # Remove ANSI color codes. def uncolor gsub(/\e\[[0-9;]*m/, '') end end