Module: RSpec::Buildkite::Recolorizer
- Defined in:
- lib/rspec/buildkite/recolorizer.rb
Class Method Summary collapse
-
.recolorize(string) ⇒ Object
Re-color an ANSI-colorized string using terminal CSS classes: github.com/buildkite/terminal/blob/05a77905c468b9150cac41298fdb8a0735024d42/style.go#L34.
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 |