Sha256: 7f6bd68d23f25014a6dbe406bf49bb1b9c2a4d2c6485e292afd3d44a927cab6b

Contents?: true

Size: 1.34 KB

Versions: 3

Compression:

Stored size: 1.34 KB

Contents

module XCPretty
  module ANSI
    attr_accessor :colorize

    FORMATTED_MATCHER = %r{\e\[(\d+)[;]?(\d+)?m(.*)\e\[0m}

    EFFECT = {
      :reset     => '0',
      :bold      => '1',
      :underline => '4'
    }

    COLORS = {
      :black  => '30',
      :red    => '31',
      :green  => '32',
      :yellow => '33',
      :blue   => '34',
      :cyan   => '36',
      :white  => '37',
      :plain  => '39'
    }

    def colorize?
      !!@colorize
    end

    def white(text)
      ansi_parse(text, :plain, :bold)
    end

    def red(text)
      ansi_parse(text, :red)
    end

    def green(text)
      ansi_parse(text, :green, :bold)
    end

    def cyan(text)
      ansi_parse(text, :cyan)
    end

    def yellow(text)
      ansi_parse(text, :yellow)
    end

    def applied_effects(text)
      effects = []
      if text =~ FORMATTED_MATCHER
        colors = COLORS.invert[$1]
        effect = EFFECT.invert[$2]
        effects << colors if colors
        effects << effect if effect
      end
      effects
    end

    def strip(text)
      text =~ FORMATTED_MATCHER ? $3 : text
    end

    def ansi_parse(text, color, effect=nil)
      return text unless colorize?
      colors_code = COLORS[color]  || ''
      effect_code = EFFECT[effect] ? ';' + EFFECT[effect] : ''
      "\e[#{colors_code}#{effect_code}m#{text}\e[#{EFFECT[:reset]}m"
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
xcpretty-0.0.6 lib/xcpretty/ansi.rb
xcpretty-0.0.5 lib/xcpretty/ansi.rb
xcpretty-0.0.4 lib/xcpretty/ansi.rb