summaryrefslogtreecommitdiff
path: root/src/buffer_utils.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-10-16 13:52:14 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-10-17 11:33:09 +0100
commitfe704b9b8433145602b1ec63f030ea98b378811d (patch)
treed1919161da6ea02fb9a934be01b4597351001fb0 /src/buffer_utils.cc
parent3795ff735a780a9c5028e03c175518a4fd103de1 (diff)
Move line parsing and to Buffer.cc directly
Diffstat (limited to 'src/buffer_utils.cc')
-rw-r--r--src/buffer_utils.cc71
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);
}
}