aboutsummaryrefslogtreecommitdiff
path: root/plugins/open_ext.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/open_ext.lua')
-rw-r--r--plugins/open_ext.lua45
1 files changed, 9 insertions, 36 deletions
diff --git a/plugins/open_ext.lua b/plugins/open_ext.lua
index f01ab85..cd0b2c6 100644
--- a/plugins/open_ext.lua
+++ b/plugins/open_ext.lua
@@ -11,30 +11,9 @@ local RootView = require "core.rootview"
local View = require "core.view"
-local function validate_utf8(s, limit)
- --[[
- MIT LICENSE
- Copyright (c) 2013 Enrique GarcĂ­a Cota
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- ]]
- limit = limit or math.huge
+local function validate_utf8(s, max_len)
local i, p, len = 1, 1, #s
- while p <= len do
+ while p <= len and i <= max_len do
if p == s:find("[%z\1-\127]", p) then p = p + 1
elseif p == s:find("[\194-\223][\128-\191]", p) then p = p + 2
elseif p == s:find( "\224[\160-\191][\128-\191]", p)
@@ -48,9 +27,7 @@ local function validate_utf8(s, limit)
return false
end
i = i + 1
- if i > limit then break end
end
-
return true
end
@@ -161,21 +138,17 @@ function OpenExtView:draw()
end
-local function read_from_doc(doc, limit)
- local l, result = 0, {}
- for _, line in ipairs(doc.lines) do
- result[#result+1] = line
- l = l + #line
- if l >= limit then break end
- end
- return table.concat(result, "")
+local function read_doc(doc, limit)
+ local f = io.open(doc.abs_filename)
+ local str = f:read(limit)
+ f:close()
+ return str
end
-
local rootview_open_doc = RootView.open_doc
function RootView:open_doc(doc)
- local str = read_from_doc(doc, 4 * 128) -- max size for 128 codepoints
- if str == "\n" or str == "" and validate_utf8(str, 128) then
+ local str = read_doc(doc, 128 * 4) -- max bytes for 128 codepoints
+ if validate_utf8(str, 128) then
return rootview_open_doc(self, doc)
else
local node = self:get_active_node_default()