howl.ui.ActionBuffer
buf = ActionBuffer! before_each -> buf.text = ''
behaves like a Buffer
buf.text = 'hello' assert.equal buf.text, 'hello' buf\append ' world' assert.equal buf.text, 'hello world'
does not collection undo revisions by default
assert.is_false ActionBuffer().collect_revisions
.insert(object, pos[ , style])
(with no specified style)
inserts the object with no specific style and returns the next position
assert.equal 6, buf\insert 'hello', 1 assert.equal 'hello', buf.text assert.is_nil style.at_pos(buf, 1)
returns <pos> and leaves the buffer untouched for an empty string
assert.equal 1, buf\insert('', 1) assert.equal '', buf.text
(with style specified)
styles the object with the specified style
buf.text = '˫˫' assert.equal 7, buf\insert('hƏllo', 2, 'keyword') assert.is_nil (style.at_pos(buf, 1)) assert.equal 'keyword', (style.at_pos(buf, 2)) assert.equal 'keyword', (style.at_pos(buf, 6)) assert.is_nil (style.at_pos(buf, 7))
returns <pos> and leaves the buffer untouched for an empty string
assert.equal 1, buf\insert('', 1, 'keyword') assert.equal '', buf.text
(when object is a styled object (.styles is present))
inserts the corresponding .text and returns the next position
assert.equal 4, buf\insert('foo', 1) chunk = buf\chunk(1, 3) assert.equal 7, buf\insert chunk, 4 assert.equal 'foofoo', buf.text
styles the inserted .text using .styles for the styling
buf\insert {text: 'styled', styles: { 2, 'keyword', 3, 3, 'number', 6 }}, 1 assert.is_nil (style.at_pos(buf, 1)) assert.equal 'keyword', (style.at_pos(buf, 2)) assert.equal 'number', (style.at_pos(buf, 3)) assert.equal 'number', (style.at_pos(buf, 5)) assert.is_nil (style.at_pos(buf, 6)) assert.equal 'styled', buf.text
still returns the next position
assert.equal 3, buf\insert StyledText('åö', {}), 1
ignores any given <style> parameter
buf\insert StyledText('foo', { 1, 'number', 4 }), 1, 'keyword' assert.equal 'number', (style.at_pos(buf, 1))
.append(text, style)
(with no specified style)
appends the text with no specific style and returns the next position
buf.text = 'hello' assert.equal #'hello world' + 1, buf\append ' world' assert.is_nil (style.at_pos(buf, 7))
(with style specified)
styles the text with the specified style
buf.text = '˫' buf\append 'hƏllo', 'keyword' assert.is_nil (style.at_pos(buf, 1)) assert.equal 'keyword', (style.at_pos(buf, 2)) assert.equal 'keyword', (style.at_pos(buf, 6))
(when object is a styled object)
appends the corresponding text and returns the next position
buf\insert 'foo', 1 chunk = buf\chunk(1, 3) assert.equals 7, buf\append chunk assert.equal 'foofoo', buf.text
styles the inserted text using .styles for the styling
buf.text = 'foo' object = StyledText('bar', {1, 'number', 2, 2, 'keyword', 3}) buf\insert object, 4 assert.equal 'foobar', buf.text assert.equal 'number', (style.at_pos(buf, 4)) assert.equal 'keyword', (style.at_pos(buf, 5)) assert.is_nil (style.at_pos(buf, 6))
still returns the next position
assert.equal 3, buf\append StyledText('åö', {})
ignores any given <style> parameter
buf\append StyledText('foo', { 1, 'number', 4 }), 'keyword' assert.equal 'number', (style.at_pos(buf, 1))
style(start_pos, end_pos, style)
applies <style> for the inclusive text range given
buf.text = 'hƏlɩo' buf\style 2, 4, 'keyword' assert.is_nil (style.at_pos(buf, 1)) assert.equal 'keyword', (style.at_pos(buf, 2)) assert.equal 'keyword', (style.at_pos(buf, 4)) assert.is_nil (style.at_pos(buf, 5))
(resource management)
buffers are collected properly
b = ActionBuffer! buffers = setmetatable { b }, __mode: 'v' b = nil collectgarbage! assert.is_nil buffers[1]