From f24aa64cd5af8ab2ae07bf567c4ee91d4d7095c6 Mon Sep 17 00:00:00 2001 From: Guldoman Date: Sat, 20 Nov 2021 01:15:13 +0100 Subject: [PATCH 1/2] Add `soft_reset` to highlighter This allows clearing the `lines` table without removing entries. --- data/core/doc/highlighter.lua | 7 +++++++ data/core/doc/init.lua | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/data/core/doc/highlighter.lua b/data/core/doc/highlighter.lua index c77e1138..68b66356 100644 --- a/data/core/doc/highlighter.lua +++ b/data/core/doc/highlighter.lua @@ -40,6 +40,13 @@ end function Highlighter:reset() self.lines = {} + self:soft_reset() +end + +function Highlighter:soft_reset() + for i=1,#self.lines do + self.lines[i] = false + end self.first_invalid_line = 1 self.max_wanted_line = 0 end diff --git a/data/core/doc/init.lua b/data/core/doc/init.lua index 2e72907a..b0f07921 100644 --- a/data/core/doc/init.lua +++ b/data/core/doc/init.lua @@ -47,7 +47,7 @@ function Doc:reset_syntax() local syn = syntax.get(self.filename or "", header) if self.syntax ~= syn then self.syntax = syn - self.highlighter:reset() + self.highlighter:soft_reset() end end From d0a2c913f505a6e357bb4edff127d00cd3834930 Mon Sep 17 00:00:00 2001 From: Guldoman Date: Sat, 20 Nov 2021 01:18:37 +0100 Subject: [PATCH 2/2] Pre-populate the highlighter This avoids problems with calls to `[insert,remove]_notify` on lines that the highlighter has not yet added. --- data/core/doc/init.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/core/doc/init.lua b/data/core/doc/init.lua index b0f07921..06cde9f9 100644 --- a/data/core/doc/init.lua +++ b/data/core/doc/init.lua @@ -62,12 +62,15 @@ function Doc:load(filename) local fp = assert( io.open(filename, "rb") ) self:reset() self.lines = {} + local i = 1 for line in fp:lines() do if line:byte(-1) == 13 then line = line:sub(1, -2) self.crlf = true end table.insert(self.lines, line .. "\n") + self.highlighter.lines[i] = false + i = i + 1 end if #self.lines == 0 then table.insert(self.lines, "\n")