Buffer: allow insert_code_point() to be called outside of insert mode
This commit is contained in:
parent
21320d9ea7
commit
348d11e992
@ -166,26 +166,23 @@ void Buffer::exit_insert_mode()
|
|||||||
|
|
||||||
void Buffer::insert_code_point(const Buffer::Iterator & position, uint32_t code_point, bool adjust_iterators)
|
void Buffer::insert_code_point(const Buffer::Iterator & position, uint32_t code_point, bool adjust_iterators)
|
||||||
{
|
{
|
||||||
if (m_insert_mode)
|
Buffer::Iterator local_position = position;
|
||||||
|
if ((code_point != '\n') && (size() == 0u))
|
||||||
{
|
{
|
||||||
Buffer::Iterator local_position = position;
|
insert_code_point(position, '\n', false);
|
||||||
if ((code_point != '\n') && (size() == 0u))
|
}
|
||||||
|
uint8_t encoded[Encoding::MAX_CODE_POINT_SIZE];
|
||||||
|
uint8_t bytes = Encoding::encode(code_point, m_encoding, encoded);
|
||||||
|
m_gap_buffer->insert(local_position.offset(), encoded, bytes);
|
||||||
|
record_change(encoded, bytes, local_position.offset(), true);
|
||||||
|
ssize_t lines = (code_point == '\n') ? 1 : 0;
|
||||||
|
if (adjust_iterators)
|
||||||
|
{
|
||||||
|
for (auto iterator : m_iterators)
|
||||||
{
|
{
|
||||||
insert_code_point(position, '\n', false);
|
if (*iterator >= local_position)
|
||||||
}
|
|
||||||
uint8_t encoded[Encoding::MAX_CODE_POINT_SIZE];
|
|
||||||
uint8_t bytes = Encoding::encode(code_point, m_encoding, encoded);
|
|
||||||
m_gap_buffer->insert(local_position.offset(), encoded, bytes);
|
|
||||||
record_change(encoded, bytes, local_position.offset(), true);
|
|
||||||
ssize_t lines = (code_point == '\n') ? 1 : 0;
|
|
||||||
if (adjust_iterators)
|
|
||||||
{
|
|
||||||
for (auto iterator : m_iterators)
|
|
||||||
{
|
{
|
||||||
if (*iterator >= local_position)
|
iterator->warp(bytes, lines);
|
||||||
{
|
|
||||||
iterator->warp(bytes, lines);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user