Skip to content
Kward Search API index

Class: Kward::ANSI::MarkdownStream

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/terminal/ansi.rb

Overview

String wrapper that strips ANSI escape sequences while preserving visible text operations.

Instance Method Summary collapse

Constructor Details

#initialize(enabled: ANSI.enabled?) ⇒ MarkdownStream

Returns a new instance of MarkdownStream.



186
187
188
189
190
191
# File 'lib/kward/terminal/ansi.rb', line 186

def initialize(enabled: ANSI.enabled?)
  @enabled = enabled
  @pending = +""
  @in_fence = false
  @line_streaming = false
end

Instance Method Details

#render(delta, final: false) ⇒ Object



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# File 'lib/kward/terminal/ansi.rb', line 193

def render(delta, final: false)
  @pending << delta.to_s
  rendered = +""
  while (match = @pending.match(/\r\n|\r|\n/))
    line = @pending[0...match.begin(0)]
    @pending = @pending[(match.end(0))..] || +""
    rendered << render_pending_line(line) << "\n"
  end

  if final
    unless @pending.empty?
      rendered << render_pending_line(@pending)
      @pending.clear
    end
  else
    streamable = streamable_inline_prefix
    unless streamable.empty?
      rendered << ANSI.inline_markdown(streamable, enabled: @enabled)
      @pending = @pending[streamable.length..] || +""
      @line_streaming = true
    end
  end

  if final && @in_fence
    rendered << "\n" unless rendered.empty? || rendered.end_with?("\n")
    rendered << ANSI.colorize("" + "" * 39, :gray, enabled: @enabled)
    @in_fence = false
  end

  rendered
end