diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index 0ee48d4..bf9f85a 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -29,3 +29,15 @@ void PieceTable::append_initial_line_piece(uint8_t * start, uint32_t length, uin if (cursor_position.pd == end_descriptor) cursor_position.pd = pd; } + +PieceTable::PieceDescriptor * PieceTable::get_start_of_line(PieceTable::PieceDescriptor * start) const +{ + PieceDescriptor * pd = start; + + while (pd->prev != start_descriptor && !pd->prev->eol()) + { + pd = pd->prev; + } + + return pd; +} diff --git a/src/core/PieceTable.h b/src/core/PieceTable.h index 9d59af9..35b7d37 100644 --- a/src/core/PieceTable.h +++ b/src/core/PieceTable.h @@ -81,6 +81,8 @@ public: void append_initial_line_piece(uint8_t * start, uint32_t length, uint32_t n_chars, bool eol); + PieceDescriptor * get_start_of_line(PieceDescriptor * start) const; + protected: const uint8_t * m_file_buffer; unsigned long m_file_buffer_size;