Module: Streamd

Defined in:
lib/streamd.rb,
lib/streamd/version.rb,
lib/streamd/renderer.rb

Defined Under Namespace

Classes: FixedStyle, Renderer

Constant Summary collapse

VERSION =
"0.1.3"

Class Method Summary collapse

Class Method Details



6
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/streamd.rb', line 6

def self.print(stream)
  whole = ""
  live = TTY::Live.new
  renderer = Renderer.create

  enum = Enumerator.new do |e|
    in_code_block = false
    stream.each do |chunk|
      curr = ""
      chunk.each_char do |char|
        whole << char
        if whole =~ /\n[\s\t]*`{3}\w*\n\z/
          in_code_block = whole.scan(/\n[\s\t]*`{3}\w*\n/).size.odd?
          curr << char
          if in_code_block
            code_sign = curr.index(/[\s\t]*`{3}\w*\n\z/)
            e << [curr[0...code_sign], true]
            curr = curr[code_sign..-1]
          else
            e << [curr, true]
            curr = ""
          end
          next
        end
        if whole =~ /\n[\n\s\t]*\n[^\n]\z/ && !in_code_block
          e << [curr, true]
          curr = char
          next
        end
        curr << char
      end
      e << [curr, false]
    end
  end

  # name = 0
  current = ""
  enum.each do |chunk, neo|
    current << chunk
    next if current.strip.empty?

    styled =
      if current =~ /^\|/
        renderer.render(current)
      else
        Glamour.render(current, style: 'dracula', width: 180, preserve_newlines: true)
      end

    styled =
      case
      when current =~ /\A[\s\t]*`{3}/
        "    " + styled.gsub(/\A[\s\n]*(\e\[[0-9;]*m[\s\n]*\e\[0m[\s\n]*)+/m, '').gsub(/(\e\[[0-9;]*m[\s\n]*\e\[0m[\s\n]*)+[\s\n]*\Z/m, '').strip
      when current =~ /\A\*\*\*/ || current =~ /\A---/ || current =~ /\A___/
        styled.gsub(/\e\[[0-9;]*m[\s\n]*\e\[0m/m, '').strip
      when current =~ /^\|/
        styled.each_line.map{|l| "  #{l}"}.join
      else
        "  " + styled.gsub(/\e\[[0-9;]*m[\s\n]*\e\[0m/m, '').strip
      end

    # File.open("/tmp/streamd.current.#{name}.txt", 'w'){|f| f.puts current}
    live.update(styled)
    if neo
      # name += 1
      puts "\n\n"
      live = TTY::Live.new
      current.clear
    end
  end

  puts "\n\n"

  whole
end