aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKovas Palunas <kovas@uw.edu>2019-06-18 13:35:35 -0700
committerJustin M. Keyes <justinkz@gmail.com>2019-06-30 15:25:49 +0200
commitfdd8dcae01beb66397226ad65e4f1bbd3d1dd55c (patch)
tree2450b7c70e68676cd2eec30005460f1e09e06ce9
parent0480e991d2180025ef040629c5dcd0a193055a2e (diff)
downloadrneovim-fdd8dcae01beb66397226ad65e4f1bbd3d1dd55c.tar.gz
rneovim-fdd8dcae01beb66397226ad65e4f1bbd3d1dd55c.tar.bz2
rneovim-fdd8dcae01beb66397226ad65e4f1bbd3d1dd55c.zip
man.vim: Handle ANSI escape sequences with ":" #10267
closes #10267
-rw-r--r--runtime/lua/man.lua4
-rw-r--r--test/functional/plugin/man_spec.lua33
2 files changed, 26 insertions, 11 deletions
diff --git a/runtime/lua/man.lua b/runtime/lua/man.lua
index 1da8ed85fc..ba6b9d09c9 100644
--- a/runtime/lua/man.lua
+++ b/runtime/lua/man.lua
@@ -107,7 +107,9 @@ local function highlight_line(line, linenr)
-- followed by '[', then a series of parameter and intermediate bytes in
-- the range 0x20 - 0x3f, then 'm'. (See ECMA-48, sections 5.4 & 8.3.117)
local sgr = prev_char:match("^%[([\032-\063]*)m$")
- if sgr then
+ -- Ignore escape sequences with : characters, as specified by ITU's T.416
+ -- Open Document Architecture and interchange format.
+ if sgr and not string.find(sgr, ":") then
local match
while sgr and #sgr > 0 do
-- Match against SGR parameters, which may be separated by ';'
diff --git a/test/functional/plugin/man_spec.lua b/test/functional/plugin/man_spec.lua
index e5da7932a5..b25bd7e85a 100644
--- a/test/functional/plugin/man_spec.lua
+++ b/test/functional/plugin/man_spec.lua
@@ -1,23 +1,19 @@
local helpers = require('test.functional.helpers')(after_each)
local plugin_helpers = require('test.functional.plugin.helpers')
-
local Screen = require('test.functional.ui.screen')
-
local command, eval, rawfeed = helpers.command, helpers.eval, helpers.rawfeed
-
-before_each(function()
- plugin_helpers.reset()
- helpers.clear()
- command('syntax on')
- command('set filetype=man')
-end)
+local clear = helpers.clear
describe(':Man', function()
describe('man.lua: highlight_line()', function()
local screen
before_each(function()
- command('syntax off') -- Ignore syntax groups
+ plugin_helpers.reset()
+ clear()
+ command('syntax on')
+ command('set filetype=man')
+ command('syntax off') -- Ignore syntax groups
screen = Screen.new(52, 5)
screen:set_default_attr_ids({
b = { bold = true },
@@ -131,5 +127,22 @@ describe(':Man', function()
|
]])
end)
+
+ it('handles : characters in input', function()
+ rawfeed([[
+ i<C-v><C-[>[40m 0 <C-v><C-[>[41m 1 <C-v><C-[>[42m 2 <C-v><C-[>[43m 3
+ <C-v><C-[>[44m 4 <C-v><C-[>[45m 5 <C-v><C-[>[46m 6 <C-v><C-[>[47m 7 <C-v><C-[>[100m 8 <C-v><C-[>[101m 9
+ <C-v><C-[>[102m 10 <C-v><C-[>[103m 11 <C-v><C-[>[104m 12 <C-v><C-[>[105m 13 <C-v><C-[>[106m 14 <C-v><C-[>[107m 15
+ <C-v><C-[>[48:5:16m 16 <ESC>]])
+ eval('man#init_pager()')
+
+ screen:expect([[
+ ^ 0 1 2 3 |
+ 4 5 6 7 8 9 |
+ 10 11 12 13 14 15 |
+ 16 |
+ |
+ ]])
+ end)
end)
end)