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
|
# File 'lib/streamd.rb', line 7
def self.print(stream)
whole = ""
live = TTY::Live.new
enum = Enumerator.new do |e|
in_code_block = false
stream.each do |chunk|
curr = ""
chunk.each_char do |char|
whole << char
if whole =~ /\n`{3}[^`]\z/
in_code_block = !in_code_block
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
current = ""
enum.each do |chunk, neo|
current << chunk
styled = Glamour.render(current, style: 'dracula', width: 180, preserve_newlines: true)
live.update(styled)
if neo
Kernel.print live.clear_lines(2)
live = TTY::Live.new
current.clear
end
end
end
|