From 57e38835499a2051953c4d2e1901996fd69d7080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 2 Mar 2017 08:53:35 +0100 Subject: lua: use goto label to mimic continue statement This is a Lua 5.2 feature supported by LuaJIT. --- lua/plugins/number-inc-dec.lua | 77 ++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 41 deletions(-) (limited to 'lua') diff --git a/lua/plugins/number-inc-dec.lua b/lua/plugins/number-inc-dec.lua index e2f5f2e..e1142ef 100644 --- a/lua/plugins/number-inc-dec.lua +++ b/lua/plugins/number-inc-dec.lua @@ -16,47 +16,42 @@ local change = function(delta) vis.count = nil -- reset count, otherwise it affects next motion for cursor in win:cursors_iterator() do - -- poor man's continue statement, use break to process next cursor - repeat - local pos = cursor.pos - if not pos then break end - local word = file:text_object_word(pos); - if not word then break end - local data = file:content(word.start, 1024) - if not data then break end - local s, e = pattern:match(data) - if not s then break end - data = string.sub(data, s, e-1) - if #data == 0 then break end - -- align start and end for fileindex - s = word.start + s - 1 - e = word.start + e - 1 - local base, format, padding = 10, 'd', 0 - if lexer.oct_num:match(data) then - base = 8 - format = 'o' - padding = #data - elseif lexer.hex_num:match(data) then - base = 16 - format = 'x' - padding = #data - #"0x" - end - local number = tonumber(data, base == 8 and 8 or nil) - if not number then - vis:info("Not a number") - break - end - number = number + delta * count - -- string.format does not support negative hex/oct values - if base ~= 10 and number < 0 then number = 0 end - number = string.format((base == 16 and "0x" or "") .. "%0"..padding..format, number) - if base == 8 and string.sub(number, 0, 1) ~= "0" then - number = '0' .. number - end - file:delete(s, e - s) - file:insert(s, number) - cursor.pos = s - until true + local pos = cursor.pos + if not pos then goto continue end + local word = file:text_object_word(pos); + if not word then goto continue end + local data = file:content(word.start, 1024) + if not data then goto continue end + local s, e = pattern:match(data) + if not s then goto continue end + data = string.sub(data, s, e-1) + if #data == 0 then goto continue end + -- align start and end for fileindex + s = word.start + s - 1 + e = word.start + e - 1 + local base, format, padding = 10, 'd', 0 + if lexer.oct_num:match(data) then + base = 8 + format = 'o' + padding = #data + elseif lexer.hex_num:match(data) then + base = 16 + format = 'x' + padding = #data - #"0x" + end + local number = tonumber(data, base == 8 and 8 or nil) + if not number then goto continue end + number = number + delta * count + -- string.format does not support negative hex/oct values + if base ~= 10 and number < 0 then number = 0 end + number = string.format((base == 16 and "0x" or "") .. "%0"..padding..format, number) + if base == 8 and string.sub(number, 0, 1) ~= "0" then + number = '0' .. number + end + file:delete(s, e - s) + file:insert(s, number) + cursor.pos = s + ::continue:: end end -- cgit v1.2.3