From 322503e814c49416f0267f3bbeb87e1b495f0449 Mon Sep 17 00:00:00 2001 From: Dhruva Sagar Date: Thu, 28 Dec 2017 01:04:45 +0530 Subject: [PATCH] Add support for escaping the separator #118 Initial support. Alignment and border creation is fixed and is consistent in considering the escaped table separator as part of the column. TODO : * Fix syntax to reflect the above. * Fix cell definition, motion & formula engine to incorporate this. --- Gemfile.lock | 6 ++++++ autoload/tablemode/align.vim | 2 +- autoload/tablemode/table.vim | 8 ++++++-- plugin/table-mode.vim | 1 + t/config/options.vim | 1 + 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index eb9fd06..2a71217 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -16,3 +16,9 @@ PLATFORMS DEPENDENCIES rake vim-flavor (~> 1.1) + +RUBY VERSION + ruby 2.3.0p0 + +BUNDLED WITH + 1.13.6 diff --git a/autoload/tablemode/align.vim b/autoload/tablemode/align.vim index 9e6330c..83d829c 100644 --- a/autoload/tablemode/align.vim +++ b/autoload/tablemode/align.vim @@ -84,7 +84,7 @@ endfunction function! tablemode#align#Align(lines) "{{{2 if empty(a:lines) | return [] | endif - let lines = map(a:lines, 'map(v:val, "v:key =~# \"text\" ? tablemode#align#Split(v:val, g:table_mode_separator) : v:val")') + let lines = map(a:lines, 'map(v:val, "v:key =~# \"text\" ? tablemode#align#Split(v:val, g:table_mode_escaped_separator_regex) : v:val")') for line in lines let stext = line.text diff --git a/autoload/tablemode/table.vim b/autoload/tablemode/table.vim index 784fca2..9773824 100644 --- a/autoload/tablemode/table.vim +++ b/autoload/tablemode/table.vim @@ -33,8 +33,12 @@ function! s:GenerateHeaderBorder(line) "{{{2 let tline = line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)] let fillchar = tablemode#table#IsHeader(line - 1) ? g:table_mode_header_fillchar : g:table_mode_fillchar - let seperator_match_regex = g:table_mode_separator . '\zs\([^' . g:table_mode_separator . ']*\)\ze' . g:table_mode_separator - let border = substitute(tline, seperator_match_regex, '\=repeat(fillchar, tablemode#utils#StrDisplayWidth(submatch(0)))', 'g') + + let special_replacement = '__' + let border = substitute(tline, g:table_mode_escaped_separator_regex, special_replacement, 'g') + let seperator_match_regex = special_replacement . '\zs\([^' . special_replacement . ']*\)\ze' . special_replacement + let border = substitute(border, seperator_match_regex, '\=repeat(fillchar, tablemode#utils#StrDisplayWidth(submatch(0)))', 'g') + let border = substitute(border, special_replacement, g:table_mode_separator, 'g') let border = substitute(border, g:table_mode_separator, g:table_mode_corner, 'g') let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_corner_corner . '\1' . g:table_mode_corner_corner, '') diff --git a/plugin/table-mode.vim b/plugin/table-mode.vim index 90f870e..b16d96c 100644 --- a/plugin/table-mode.vim +++ b/plugin/table-mode.vim @@ -18,6 +18,7 @@ endfunction call s:SetGlobalOptDefault('table_mode_corner', '+') call s:SetGlobalOptDefault('table_mode_verbose', 1) call s:SetGlobalOptDefault('table_mode_separator', '|') +call s:SetGlobalOptDefault('table_mode_escaped_separator_regex', '\(\\\)\@t') diff --git a/t/config/options.vim b/t/config/options.vim index 24a550c..fa3fbdd 100644 --- a/t/config/options.vim +++ b/t/config/options.vim @@ -1,5 +1,6 @@ let g:table_mode_corner = '+' let g:table_mode_separator = '|' +let g:table_mode_escaped_separator_regex = '\(\\\)\@t'