Module: RSpec::Buildkite::Recolorizer

Defined in:
lib/rspec/buildkite/recolorizer.rb

Class Method Summary collapse

Class Method Details

.recolorize(string) ⇒ Object

Re-color an ANSI-colorized string using terminal CSS classes: github.com/buildkite/terminal/blob/05a77905c468b9150cac41298fdb8a0735024d42/style.go#L34



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/rspec/buildkite/recolorizer.rb', line 7

def recolorize(string)
  level = 0
  string.gsub(/\e\[(\d+(?:;\d+)*)m/) do
    "".tap do |buffer|
      codes = $1.split(";").map(&:to_i)

      classes = []
      while code = codes.shift
        case code
        when 0
          classes.clear
          buffer << ("</span>" * level)
          level = 0
        when 1..5, 9, 30..37
          classes << "term-fg#{code}"
        when 38
          if codes[0] == 5
            codes.shift
            if codes[0]
              classes << "term-fgx#{codes.shift}"
            end
          end
        when 40..47
          classes << "term-bg#{code}"
        when 48
          if codes[0] == 5
            codes.shift
            if codes[0]
              classes << "term-bgx#{codes.shift}"
            end
          end
        when 90..97
          classes << "term-fgi#{code}"
        when 100..107
          classes << "term-bgi#{code}"
        end
      end

      if classes.any?
        level += 1
        buffer << %{<span class=#{classes.map { |klass| klass }.join(" ").encode(:xml => :attr)}>}
      end
    end
  end << ("</span>" * level)
end