diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-10-16 13:52:14 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-10-17 11:33:09 +0100 |
| commit | fe704b9b8433145602b1ec63f030ea98b378811d (patch) | |
| tree | d1919161da6ea02fb9a934be01b4597351001fb0 /src/buffer_utils.cc | |
| parent | 3795ff735a780a9c5028e03c175518a4fd103de1 (diff) | |
Move line parsing and to Buffer.cc directly
Diffstat (limited to 'src/buffer_utils.cc')
| -rw-r--r-- | src/buffer_utils.cc | 71 |
1 files changed, 7 insertions, 64 deletions
diff --git a/src/buffer_utils.cc b/src/buffer_utils.cc index e2fdbfcb..045e4364 100644 --- a/src/buffer_utils.cc +++ b/src/buffer_utils.cc @@ -47,53 +47,12 @@ ByteCount get_byte_to_column(const Buffer& buffer, CharCount tabstop, CharCoord return (int)(it - line.begin()); } -struct BufferData -{ - BufferLines lines; - bool bom = false; - bool crlf = false; - - BufferData(StringView data) - { - const char* pos = data.begin(); - if (data.length() >= 3 and - data[0_byte] == '\xEF' and data[1_byte] == '\xBB' and data[2_byte] == '\xBF') - { - bom = true; - pos = data.begin() + 3; - } - - while (pos < data.end()) - { - const char* line_end = pos; - while (line_end < data.end() and *line_end != '\r' and *line_end != '\n') - ++line_end; - - lines.emplace_back(StringData::create({pos, line_end}, '\n')); - - if (line_end+1 != data.end() and *line_end == '\r' and *(line_end+1) == '\n') - { - crlf = true; - pos = line_end + 2; - } - else - pos = line_end + 1; - } - } - - void apply_options(Buffer& buffer) const - { - OptionManager& options = buffer.options(); - options.get_local_option("eolformat").set<String>(crlf ? "crlf" : "lf"); - options.get_local_option("BOM").set<String>(bom ? "utf-8" : "no"); - } -}; - Buffer* create_file_buffer(StringView filename) { if (MappedFile file_data{filename}) - return create_buffer({ file_data.data, (int)file_data.st.st_size }, filename, - Buffer::Flags::File, file_data.st.st_mtim); + return new Buffer(filename.str(), Buffer::Flags::File, + { file_data.data, (int)file_data.st.st_size }, + file_data.st.st_mtim); return nullptr; } @@ -102,28 +61,12 @@ bool reload_file_buffer(Buffer& buffer) kak_assert(buffer.flags() & Buffer::Flags::File); if (MappedFile file_data{buffer.name()}) { - reload_buffer(buffer, { file_data.data, (int)file_data.st.st_size }, file_data.st.st_mtim); + buffer.reload({ file_data.data, (int)file_data.st.st_size }, file_data.st.st_mtim); return true; } return false; } -Buffer* create_buffer(StringView data, StringView name, Buffer::Flags flags, - timespec fs_timestamp) -{ - BufferData buf_data(data); - Buffer* buffer = new Buffer{name.str(), flags, std::move(buf_data.lines), fs_timestamp}; - buf_data.apply_options(*buffer); - return buffer; -} - -void reload_buffer(Buffer& buffer, StringView data, timespec fs_timestamp) -{ - BufferData buf_data(data); - buffer.reload(std::move(buf_data.lines), fs_timestamp); - buf_data.apply_options(buffer); -} - Buffer* create_fifo_buffer(String name, int fd, bool scroll) { static ValueId s_fifo_watcher_id = ValueId::get_free_id(); @@ -132,7 +75,7 @@ Buffer* create_fifo_buffer(String name, int fd, bool scroll) if (buffer) { buffer->flags() |= Buffer::Flags::NoUndo; - buffer->reload({"\n"_ss}, InvalidTime); + buffer->reload({}, InvalidTime); } else buffer = new Buffer(std::move(name), Buffer::Flags::Fifo | Buffer::Flags::NoUndo); @@ -213,13 +156,13 @@ void write_to_debug_buffer(StringView str) return; } - const StringView debug_buffer_name = "*debug*"; + constexpr StringView debug_buffer_name = "*debug*"; if (Buffer* buffer = BufferManager::instance().get_buffer_ifp(debug_buffer_name)) buffer->insert(buffer->end(), str); else { String line = str + ((str.empty() or str.back() != '\n') ? "\n" : ""); - create_buffer(line, debug_buffer_name, Buffer::Flags::NoUndo, InvalidTime); + new Buffer(debug_buffer_name.str(), Buffer::Flags::NoUndo, line, InvalidTime); } } |
