mirror of
https://github.com/dhruvasagar/vim-table-mode.git
synced 2025-11-08 11:03:47 -05:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c91a4efa2 | ||
|
|
8d9a0082f5 | ||
|
|
0f1254e1fe | ||
|
|
e7e806916f | ||
|
|
9336261063 | ||
|
|
a5ae0253be | ||
|
|
80ec86e385 | ||
|
|
7eff1e30f1 | ||
|
|
7258a56d20 | ||
|
|
8d3c4912a2 | ||
|
|
13e1a20002 | ||
|
|
d73236f964 | ||
|
|
c5efbe1ad7 | ||
|
|
8970d5ffbb | ||
|
|
859eb42856 | ||
|
|
d7ad97f099 | ||
|
|
dbd79f2c1e | ||
|
|
fa568fe91b | ||
|
|
53da3fb4c2 | ||
|
|
6007953f0e |
@@ -1,4 +1,4 @@
|
|||||||
language: ruby
|
language: ruby
|
||||||
rvm:
|
rvm:
|
||||||
- 1.9.3
|
- 2.1
|
||||||
script: rake ci
|
script: rake ci
|
||||||
|
|||||||
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,4 +1,16 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## Version 4.5.0
|
||||||
|
* Refactored toggled mappings
|
||||||
|
* Table Syntax now gets toggled with Table Mode
|
||||||
|
|
||||||
|
## Version 4.4.2
|
||||||
|
* Updated mappings to be buffer local.
|
||||||
|
* Updated mappings to toggle and function only when table mode is active.
|
||||||
|
|
||||||
|
## Version 4.4.1
|
||||||
|
* Added syntax for matching tables
|
||||||
|
|
||||||
## Version 4.4.0
|
## Version 4.4.0
|
||||||
* Minor bug fixes
|
* Minor bug fixes
|
||||||
* Added feature to allow using negative indices within formulas to access rows,
|
* Added feature to allow using negative indices within formulas to access rows,
|
||||||
@@ -103,3 +115,7 @@
|
|||||||
|
|
||||||
## Version 1.0 :
|
## Version 1.0 :
|
||||||
* First stable release, create tables as you type.
|
* First stable release, create tables as you type.
|
||||||
|
|
||||||
|
<!--
|
||||||
|
vim: ft=markdown
|
||||||
|
-->
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# VIM Table Mode v4.4.0 [](https://travis-ci.org/dhruvasagar/vim-table-mode)
|
# VIM Table Mode v4.5.0 [](https://travis-ci.org/dhruvasagar/vim-table-mode)
|
||||||
|
|
||||||
An awesome automatic table creator & formatter allowing one to create neat
|
An awesome automatic table creator & formatter allowing one to create neat
|
||||||
tables as you type.
|
tables as you type.
|
||||||
@@ -151,7 +151,7 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
|
|||||||
mode also provides 2 special functions `Sum` and `Average`. Both these
|
mode also provides 2 special functions `Sum` and `Average`. Both these
|
||||||
functions take a range as input. A range can be of two forms :
|
functions take a range as input. A range can be of two forms :
|
||||||
|
|
||||||
- `r1,r2`: This represents cells in the current column from row `r1`
|
- `r1:r2`: This represents cells in the current column from row `r1`
|
||||||
through `r2`. If `r2` is negative it represents `r2` rows above the
|
through `r2`. If `r2` is negative it represents `r2` rows above the
|
||||||
current row (of the target cell).
|
current row (of the target cell).
|
||||||
|
|
||||||
|
|||||||
@@ -32,21 +32,90 @@ function! s:SetBufferOptDefault(opt, val) "{{{2
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:ToggleMapping() "{{{2
|
function! s:Map(map, to, mode)
|
||||||
if exists('b:table_mode_active') && b:table_mode_active
|
if !hasmapto(a:map, a:mode)
|
||||||
call s:SetBufferOptDefault('table_mode_separator_map', g:table_mode_separator)
|
for l:mode in split(a:mode, '.\zs')
|
||||||
" '|' is a special character, we need to map <Bar> instead
|
execute l:mode . 'map <buffer>' a:to a:map
|
||||||
if g:table_mode_separator ==# '|' | let b:table_mode_separator_map = '<Bar>' | endif
|
endfor
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
execute "inoremap <silent> <buffer> " . b:table_mode_separator_map . ' ' .
|
function! s:UnMap(map, mode)
|
||||||
\ b:table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
|
if !empty(maparg(a:map, a:mode))
|
||||||
|
for mode in split(a:mode, '.\zs')
|
||||||
|
execute l:mode . 'unmap <buffer>' a:map
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ToggleMapping() "{{{2
|
||||||
|
let separator_map = g:table_mode_separator
|
||||||
|
" '|' is a special character, we need to map <Bar> instead
|
||||||
|
if g:table_mode_separator ==# '|' | let separator_map = '<Bar>' | endif
|
||||||
|
|
||||||
|
if tablemode#IsActive()
|
||||||
|
call s:Map('<Plug>(table-mode-tableize)', separator_map, 'i')
|
||||||
|
call s:Map('<Plug>(table-mode-motion-up)', '{<Bar>', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-motion-down)', '}<Bar>', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-motion-left)', '[<Bar>', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-motion-right)', ']<Bar>', 'n')
|
||||||
|
|
||||||
|
call s:Map('<Plug>(table-mode-cell-text-object-a)', 'a<Bar>', 'ox')
|
||||||
|
call s:Map('<Plug>(table-mode-cell-text-object-i)', 'i<Bar>', 'ox')
|
||||||
|
|
||||||
|
call s:Map('<Plug>(table-mode-realign)', '<Leader>tr', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-delete-row)', '<Leader>tdd', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-delete-column)', '<Leader>tdc', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-add-formula)', '<Leader>tfa', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-eval-formula)', '<Leader>tfe', 'n')
|
||||||
|
call s:Map('<Plug>(table-mode-echo-cell)', '<Leader>t?', 'n')
|
||||||
else
|
else
|
||||||
silent! execute "iunmap <silent> <buffer> " . b:table_mode_separator_map
|
call s:UnMap(separator_map, 'i')
|
||||||
|
call s:UnMap('{<Bar>', 'n')
|
||||||
|
call s:UnMap('}<Bar>', 'n')
|
||||||
|
call s:UnMap('[<Bar>', 'n')
|
||||||
|
call s:UnMap(']<Bar>', 'n')
|
||||||
|
call s:UnMap('a<Bar>', 'o')
|
||||||
|
call s:UnMap('i<Bar>', 'o')
|
||||||
|
call s:UnMap('<Leader>tdd', 'n')
|
||||||
|
call s:UnMap('<Leader>tdc', 'n')
|
||||||
|
call s:UnMap('<Leader>tfa', 'n')
|
||||||
|
call s:UnMap('<Leader>tfe', 'n')
|
||||||
|
call s:UnMap('<Leader>t?', 'n')
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#SyntaxEnable()
|
||||||
|
exec 'syntax match Table'
|
||||||
|
\ '/' . tablemode#table#StartExpr() . '\zs|.\+|\ze' . tablemode#table#EndExpr() . '/'
|
||||||
|
\ 'contains=TableBorder,TableSeparator,TableColumnAlign containedin=ALL'
|
||||||
|
syntax match TableSeparator /|/ contained
|
||||||
|
syntax match TableColumnAlign /:/ contained
|
||||||
|
syntax match TableBorder /[\-+]\+/ contained
|
||||||
|
|
||||||
|
hi! link TableBorder Delimiter
|
||||||
|
hi! link TableSeparator Delimiter
|
||||||
|
hi! link TableColumnAlign Type
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ToggleSyntax()
|
||||||
|
if tablemode#IsActive()
|
||||||
|
call tablemode#SyntaxEnable()
|
||||||
|
else
|
||||||
|
syntax clear Table
|
||||||
|
syntax clear TableBorder
|
||||||
|
syntax clear TableSeparator
|
||||||
|
syntax clear TableColumnAlign
|
||||||
|
|
||||||
|
hi! link TableBorder NONE
|
||||||
|
hi! link TableSeparator NONE
|
||||||
|
hi! link TableColumnAlign NONE
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:SetActive(bool) "{{{2
|
function! s:SetActive(bool) "{{{2
|
||||||
let b:table_mode_active = a:bool
|
let b:table_mode_active = a:bool
|
||||||
|
call s:ToggleSyntax()
|
||||||
call s:ToggleMapping()
|
call s:ToggleMapping()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -101,7 +170,7 @@ endfunction
|
|||||||
|
|
||||||
function! tablemode#TableizeInsertMode() "{{{2
|
function! tablemode#TableizeInsertMode() "{{{2
|
||||||
if tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator)
|
if tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator)
|
||||||
call tablemode#table#AddHeaderBorder('.')
|
call tablemode#table#AddBorder('.')
|
||||||
normal! A
|
normal! A
|
||||||
elseif tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator)
|
elseif tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator)
|
||||||
let column = tablemode#utils#strlen(substitute(getline('.')[0:col('.')], '[^' . g:table_mode_separator . ']', '', 'g'))
|
let column = tablemode#utils#strlen(substitute(getline('.')[0:col('.')], '[^' . g:table_mode_separator . ']', '', 'g'))
|
||||||
|
|||||||
@@ -19,32 +19,6 @@
|
|||||||
|
|
||||||
" Borrowed from Tabular
|
" Borrowed from Tabular
|
||||||
" Private Functions {{{1
|
" Private Functions {{{1
|
||||||
" Return the number of bytes in a string after expanding tabs to spaces. {{{2
|
|
||||||
" This expansion is done based on the current value of 'tabstop'
|
|
||||||
if exists('*strdisplaywidth')
|
|
||||||
" Needs vim 7.3
|
|
||||||
let s:Strlen = function("strdisplaywidth")
|
|
||||||
else
|
|
||||||
function! s:Strlen(string)
|
|
||||||
" Implement the tab handling part of strdisplaywidth for vim 7.2 and
|
|
||||||
" earlier - not much that can be done about handling doublewidth
|
|
||||||
" characters.
|
|
||||||
let rv = 0
|
|
||||||
let i = 0
|
|
||||||
|
|
||||||
for char in split(a:string, '\zs')
|
|
||||||
if char == "\t"
|
|
||||||
let rv += &ts - i
|
|
||||||
let i = 0
|
|
||||||
else
|
|
||||||
let rv += 1
|
|
||||||
let i = (i + 1) % &ts
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return rv
|
|
||||||
endfunction
|
|
||||||
endif
|
|
||||||
" function! s:StripTrailingSpaces(string) - Remove all trailing spaces {{{2
|
" function! s:StripTrailingSpaces(string) - Remove all trailing spaces {{{2
|
||||||
" from a string.
|
" from a string.
|
||||||
function! s:StripTrailingSpaces(string)
|
function! s:StripTrailingSpaces(string)
|
||||||
@@ -52,7 +26,7 @@ function! s:StripTrailingSpaces(string)
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:Padding(string, length, where) "{{{3
|
function! s:Padding(string, length, where) "{{{3
|
||||||
let gap_length = a:length - s:Strlen(a:string)
|
let gap_length = a:length - tablemode#utils#StrDisplayWidth(a:string)
|
||||||
if a:where =~# 'l'
|
if a:where =~# 'l'
|
||||||
return a:string . repeat(" ", gap_length)
|
return a:string . repeat(" ", gap_length)
|
||||||
elseif a:where =~# 'r'
|
elseif a:where =~# 'r'
|
||||||
@@ -119,7 +93,7 @@ endfunction
|
|||||||
|
|
||||||
function! tablemode#align#alignments(lnum, ncols) "{{{2
|
function! tablemode#align#alignments(lnum, ncols) "{{{2
|
||||||
let alignments = []
|
let alignments = []
|
||||||
if tablemode#table#IsHeader(a:lnum+1)
|
if tablemode#table#IsBorder(a:lnum+1)
|
||||||
let hcols = tablemode#align#Split(getline(a:lnum+1), '[' . g:table_mode_corner . g:table_mode_corner_corner . ']')
|
let hcols = tablemode#align#Split(getline(a:lnum+1), '[' . g:table_mode_corner . g:table_mode_corner_corner . ']')
|
||||||
for idx in range(len(hcols))
|
for idx in range(len(hcols))
|
||||||
" Right align if header
|
" Right align if header
|
||||||
@@ -132,6 +106,7 @@ function! tablemode#align#alignments(lnum, ncols) "{{{2
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#align#Align(lines) "{{{2
|
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_separator) : v:val")')
|
||||||
|
|
||||||
for line in lines
|
for line in lines
|
||||||
@@ -154,9 +129,9 @@ function! tablemode#align#Align(lines) "{{{2
|
|||||||
if len(stext) <= 1 | continue | endif
|
if len(stext) <= 1 | continue | endif
|
||||||
for i in range(len(stext))
|
for i in range(len(stext))
|
||||||
if i == len(maxes)
|
if i == len(maxes)
|
||||||
let maxes += [ s:Strlen(stext[i]) ]
|
let maxes += [ tablemode#utils#StrDisplayWidth(stext[i]) ]
|
||||||
else
|
else
|
||||||
let maxes[i] = max([ maxes[i], s:Strlen(stext[i]) ])
|
let maxes[i] = max([ maxes[i], tablemode#utils#StrDisplayWidth(stext[i]) ])
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endfor
|
endfor
|
||||||
|
|||||||
@@ -50,10 +50,10 @@ function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
|
|||||||
if tablemode#table#IsRow(a:line)
|
if tablemode#table#IsRow(a:line)
|
||||||
let line = tablemode#utils#line(a:line)
|
let line = tablemode#utils#line(a:line)
|
||||||
|
|
||||||
while tablemode#table#IsRow(line - 1) || tablemode#table#IsHeader(line - 1)
|
while tablemode#table#IsRow(line - 1) || tablemode#table#IsBorder(line - 1)
|
||||||
let line -= 1
|
let line -= 1
|
||||||
endwhile
|
endwhile
|
||||||
if tablemode#table#IsHeader(line) | let line += 1 | endif
|
if tablemode#table#IsBorder(line) | let line += 1 | endif
|
||||||
|
|
||||||
return line
|
return line
|
||||||
endif
|
endif
|
||||||
@@ -69,10 +69,10 @@ function! tablemode#spreadsheet#GetLastRow(line) "{{{2
|
|||||||
if tablemode#table#IsRow(a:line)
|
if tablemode#table#IsRow(a:line)
|
||||||
let line = tablemode#utils#line(a:line)
|
let line = tablemode#utils#line(a:line)
|
||||||
|
|
||||||
while tablemode#table#IsRow(line + 1) || tablemode#table#IsHeader(line + 1)
|
while tablemode#table#IsRow(line + 1) || tablemode#table#IsBorder(line + 1)
|
||||||
let line += 1
|
let line += 1
|
||||||
endwhile
|
endwhile
|
||||||
if tablemode#table#IsHeader(line) | let line -= 1 | endif
|
if tablemode#table#IsBorder(line) | let line -= 1 | endif
|
||||||
|
|
||||||
return line
|
return line
|
||||||
endif
|
endif
|
||||||
@@ -89,7 +89,7 @@ function! tablemode#spreadsheet#LineNr(row) "{{{2
|
|||||||
let line = tablemode#spreadsheet#GetFirstRow('.')
|
let line = tablemode#spreadsheet#GetFirstRow('.')
|
||||||
let row_nr = 0
|
let row_nr = 0
|
||||||
|
|
||||||
while tablemode#table#IsRow(line + 1) || tablemode#table#IsHeader(line + 1)
|
while tablemode#table#IsRow(line + 1) || tablemode#table#IsBorder(line + 1)
|
||||||
if tablemode#table#IsRow(line)
|
if tablemode#table#IsRow(line)
|
||||||
let row_nr += 1
|
let row_nr += 1
|
||||||
if row ==# row_nr | break | endif
|
if row ==# row_nr | break | endif
|
||||||
@@ -105,7 +105,7 @@ function! tablemode#spreadsheet#RowNr(line) "{{{2
|
|||||||
let line = tablemode#utils#line(a:line)
|
let line = tablemode#utils#line(a:line)
|
||||||
|
|
||||||
let rowNr = 0
|
let rowNr = 0
|
||||||
while tablemode#table#IsRow(line) || tablemode#table#IsHeader(line)
|
while tablemode#table#IsRow(line) || tablemode#table#IsBorder(line)
|
||||||
if tablemode#table#IsRow(line) | let rowNr += 1 | endif
|
if tablemode#table#IsRow(line) | let rowNr += 1 | endif
|
||||||
let line -= 1
|
let line -= 1
|
||||||
endwhile
|
endwhile
|
||||||
@@ -117,13 +117,13 @@ function! tablemode#spreadsheet#RowCount(line) "{{{2
|
|||||||
let line = tablemode#utils#line(a:line)
|
let line = tablemode#utils#line(a:line)
|
||||||
|
|
||||||
let [tline, totalRowCount] = [line, 0]
|
let [tline, totalRowCount] = [line, 0]
|
||||||
while tablemode#table#IsRow(tline) || tablemode#table#IsHeader(tline)
|
while tablemode#table#IsRow(tline) || tablemode#table#IsBorder(tline)
|
||||||
if tablemode#table#IsRow(tline) | let totalRowCount += 1 | endif
|
if tablemode#table#IsRow(tline) | let totalRowCount += 1 | endif
|
||||||
let tline -= 1
|
let tline -= 1
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
let tline = line + 1
|
let tline = line + 1
|
||||||
while tablemode#table#IsRow(tline) || tablemode#table#IsHeader(tline)
|
while tablemode#table#IsRow(tline) || tablemode#table#IsBorder(tline)
|
||||||
if tablemode#table#IsRow(tline) | let totalRowCount += 1 | endif
|
if tablemode#table#IsRow(tline) | let totalRowCount += 1 | endif
|
||||||
let tline += 1
|
let tline += 1
|
||||||
endwhile
|
endwhile
|
||||||
@@ -166,27 +166,27 @@ function! tablemode#spreadsheet#MoveToStartOfCell() "{{{2
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#spreadsheet#GetLastRow(line) "{{{2
|
function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
|
||||||
if tablemode#table#IsRow(a:line)
|
if tablemode#table#IsRow(a:line)
|
||||||
let line = tablemode#utils#line(a:line)
|
let line = tablemode#utils#line(a:line)
|
||||||
|
|
||||||
while tablemode#table#IsRow(line + 1) || tablemode#table#IsHeader(line + 1)
|
while tablemode#table#IsRow(line - 1) || tablemode#table#IsBorder(line - 1)
|
||||||
let line += 1
|
let line -= 1
|
||||||
endwhile
|
endwhile
|
||||||
if tablemode#table#IsHeader(line) | let line -= 1 | endif
|
if tablemode#table#IsBorder(line) | let line += 1 | endif
|
||||||
|
|
||||||
return line
|
return line
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
|
function! tablemode#spreadsheet#GetLastRow(line) "{{{2
|
||||||
if tablemode#table#IsRow(a:line)
|
if tablemode#table#IsRow(a:line)
|
||||||
let line = tablemode#utils#line(a:line)
|
let line = tablemode#utils#line(a:line)
|
||||||
|
|
||||||
while tablemode#table#IsRow(line - 1) || tablemode#table#IsHeader(line - 1)
|
while tablemode#table#IsRow(line + 1) || tablemode#table#IsBorder(line + 1)
|
||||||
let line -= 1
|
let line += 1
|
||||||
endwhile
|
endwhile
|
||||||
if tablemode#table#IsHeader(line) | let line += 1 | endif
|
if tablemode#table#IsBorder(line) | let line -= 1 | endif
|
||||||
|
|
||||||
return line
|
return line
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
|
|||||||
if row == 0
|
if row == 0
|
||||||
let values = []
|
let values = []
|
||||||
let line = first_row
|
let line = first_row
|
||||||
while tablemode#table#IsRow(line) || tablemode#table#IsHeader(line)
|
while tablemode#table#IsRow(line) || tablemode#table#IsBorder(line)
|
||||||
if tablemode#table#IsRow(line)
|
if tablemode#table#IsRow(line)
|
||||||
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
||||||
call add(values, tablemode#utils#strip(get(split(row_line, g:table_mode_separator), colm>0?colm-1:colm, '')))
|
call add(values, tablemode#utils#strip(get(split(row_line, g:table_mode_separator), colm>0?colm-1:colm, '')))
|
||||||
@@ -97,7 +97,7 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
|
|||||||
let row_nr = 0
|
let row_nr = 0
|
||||||
let row_diff = row > 0 ? 1 : -1
|
let row_diff = row > 0 ? 1 : -1
|
||||||
let line = row > 0 ? first_row : last_row
|
let line = row > 0 ? first_row : last_row
|
||||||
while tablemode#table#IsRow(line) || tablemode#table#IsHeader(line)
|
while tablemode#table#IsRow(line) || tablemode#table#IsBorder(line)
|
||||||
if tablemode#table#IsRow(line)
|
if tablemode#table#IsRow(line)
|
||||||
let row_nr += row_diff
|
let row_nr += row_diff
|
||||||
if row ==# row_nr | break | endif
|
if row ==# row_nr | break | endif
|
||||||
@@ -127,10 +127,27 @@ function! tablemode#spreadsheet#cell#GetCell(...) "{{{2
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#spreadsheet#cell#GetRow(row, ...) abort "{{{2
|
function! tablemode#spreadsheet#cell#GetRow(row, ...) abort "{{{2
|
||||||
let line = a:0 < 1 ? '.' : a:1
|
let line = a:0 ? a:1 : '.'
|
||||||
return tablemode#spreadsheet#cell#GetCells(line, a:row)
|
return tablemode#spreadsheet#cell#GetCells(line, a:row)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#spreadsheet#cell#GetRowColumn(col, ...) abort "{{{2
|
||||||
|
let line = a:0 ? a:1 : '.'
|
||||||
|
let row = tablemode#spreadsheet#RowNr('.')
|
||||||
|
return tablemode#spreadsheet#cell#GetCells(line, row, a:col)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#spreadsheet#cell#GetColumn(col, ...) abort "{{{2
|
||||||
|
let line = a:0 ? a:1 : '.'
|
||||||
|
return tablemode#spreadsheet#cell#GetCells(line, 0, a:col)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#spreadsheet#cell#GetColumnRow(row, ...) abort "{{{2
|
||||||
|
let line = a:0 ? a:1 : '.'
|
||||||
|
let col = tablemode#spreadsheet#ColumnNr('.')
|
||||||
|
return tablemode#spreadsheet#cell#GetCells(line, a:row, col)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! tablemode#spreadsheet#cell#GetCellRange(range, ...) abort "{{{2
|
function! tablemode#spreadsheet#cell#GetCellRange(range, ...) abort "{{{2
|
||||||
if a:0 < 1
|
if a:0 < 1
|
||||||
let [line, colm] = ['.', tablemode#spreadsheet#ColumnNr('.')]
|
let [line, colm] = ['.', tablemode#spreadsheet#ColumnNr('.')]
|
||||||
@@ -169,23 +186,6 @@ function! tablemode#spreadsheet#cell#GetCellRange(range, ...) abort "{{{2
|
|||||||
return values
|
return values
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#spreadsheet#cell#GetRowColumn(col, ...) abort "{{{2
|
|
||||||
let line = a:0 < 1 ? '.' : a:1
|
|
||||||
let row = tablemode#spreadsheet#RowNr('.')
|
|
||||||
return tablemode#spreadsheet#cell#GetCells(line, row, a:col)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! tablemode#spreadsheet#cell#GetColumn(col, ...) abort "{{{2
|
|
||||||
let line = a:0 < 1 ? '.' : a:1
|
|
||||||
return tablemode#spreadsheet#cell#GetCells(line, 0, a:col)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! tablemode#spreadsheet#cell#GetColumnRow(row, ...) abort "{{{2
|
|
||||||
let line = a:0 < 1 ? '.' : a:1
|
|
||||||
let col = tablemode#spreadsheet#ColumnNr('.')
|
|
||||||
return tablemode#spreadsheet#cell#GetCells(line, a:row, col)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! tablemode#spreadsheet#cell#SetCell(val, ...) "{{{2
|
function! tablemode#spreadsheet#cell#SetCell(val, ...) "{{{2
|
||||||
if a:0 == 0
|
if a:0 == 0
|
||||||
let [line, row, colm] = ['.', tablemode#spreadsheet#RowNr('.'), tablemode#spreadsheet#ColumnNr('.')]
|
let [line, row, colm] = ['.', tablemode#spreadsheet#RowNr('.'), tablemode#spreadsheet#ColumnNr('.')]
|
||||||
@@ -233,7 +233,7 @@ function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
|
|||||||
for ii in range(l:count)
|
for ii in range(l:count)
|
||||||
if a:direction ==# 'l'
|
if a:direction ==# 'l'
|
||||||
if tablemode#spreadsheet#IsLastCell()
|
if tablemode#spreadsheet#IsLastCell()
|
||||||
if !tablemode#table#IsRow(line('.') + 1) && (tablemode#table#IsHeader(line('.') + 1) && !tablemode#table#IsRow(line('.') + 2))
|
if !tablemode#table#IsRow(line('.') + 1) && (tablemode#table#IsBorder(line('.') + 1) && !tablemode#table#IsRow(line('.') + 2))
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call tablemode#spreadsheet#cell#Motion('j', 1)
|
call tablemode#spreadsheet#cell#Motion('j', 1)
|
||||||
@@ -248,7 +248,7 @@ function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
|
|||||||
endif
|
endif
|
||||||
elseif a:direction ==# 'h'
|
elseif a:direction ==# 'h'
|
||||||
if tablemode#spreadsheet#IsFirstCell()
|
if tablemode#spreadsheet#IsFirstCell()
|
||||||
if !tablemode#table#IsRow(line('.') - 1) && (tablemode#table#IsHeader(line('.') - 1) && !tablemode#table#IsRow(line('.') - 2))
|
if !tablemode#table#IsRow(line('.') - 1) && (tablemode#table#IsBorder(line('.') - 1) && !tablemode#table#IsRow(line('.') - 2))
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call tablemode#spreadsheet#cell#Motion('k', 1)
|
call tablemode#spreadsheet#cell#Motion('k', 1)
|
||||||
@@ -265,7 +265,7 @@ function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
|
|||||||
if tablemode#table#IsRow(line('.') + 1)
|
if tablemode#table#IsRow(line('.') + 1)
|
||||||
" execute 'normal! ' . 1 . 'j'
|
" execute 'normal! ' . 1 . 'j'
|
||||||
normal! j
|
normal! j
|
||||||
elseif tablemode#table#IsHeader(line('.') + 1) && tablemode#table#IsRow(line('.') + 2)
|
elseif tablemode#table#IsBorder(line('.') + 1) && tablemode#table#IsRow(line('.') + 2)
|
||||||
" execute 'normal! ' . 2 . 'j'
|
" execute 'normal! ' . 2 . 'j'
|
||||||
normal! 2j
|
normal! 2j
|
||||||
endif
|
endif
|
||||||
@@ -273,7 +273,7 @@ function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
|
|||||||
if tablemode#table#IsRow(line('.') - 1)
|
if tablemode#table#IsRow(line('.') - 1)
|
||||||
" execute 'normal! ' . 1 . 'k'
|
" execute 'normal! ' . 1 . 'k'
|
||||||
normal! k
|
normal! k
|
||||||
elseif tablemode#table#IsHeader(line('.') - 1) && tablemode#table#IsRow(line('.') - 2)
|
elseif tablemode#table#IsBorder(line('.') - 1) && tablemode#table#IsRow(line('.') - 2)
|
||||||
" execute 'normal! ' . (1 + 1) . 'k'
|
" execute 'normal! ' . (1 + 1) . 'k'
|
||||||
normal! 2k
|
normal! 2k
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function! tablemode#spreadsheet#formula#Add(...) "{{{2
|
|||||||
if fr !=# ''
|
if fr !=# ''
|
||||||
let fr = '$' . row . ',' . colm . '=' . fr
|
let fr = '$' . row . ',' . colm . '=' . fr
|
||||||
let fline = tablemode#spreadsheet#GetLastRow('.') + 1
|
let fline = tablemode#spreadsheet#GetLastRow('.') + 1
|
||||||
if tablemode#table#IsHeader(fline) | let fline += 1 | endif
|
if tablemode#table#IsBorder(fline) | let fline += 1 | endif
|
||||||
let cursor_pos = [line('.'), col('.')]
|
let cursor_pos = [line('.'), col('.')]
|
||||||
if getline(fline) =~# 'tmf: '
|
if getline(fline) =~# 'tmf: '
|
||||||
" Comment line correctly
|
" Comment line correctly
|
||||||
@@ -129,13 +129,13 @@ function! tablemode#spreadsheet#formula#EvaluateFormulaLine() abort "{{{2
|
|||||||
if tablemode#table#IsRow('.') " We're inside the table
|
if tablemode#table#IsRow('.') " We're inside the table
|
||||||
let line = tablemode#spreadsheet#GetLastRow('.')
|
let line = tablemode#spreadsheet#GetLastRow('.')
|
||||||
let fline = line + 1
|
let fline = line + 1
|
||||||
if tablemode#table#IsHeader(fline) | let fline += 1 | endif
|
if tablemode#table#IsBorder(fline) | let fline += 1 | endif
|
||||||
if getline(fline) =~# 'tmf: '
|
if getline(fline) =~# 'tmf: '
|
||||||
let exprs = split(matchstr(getline(fline), matchexpr), ';')
|
let exprs = split(matchstr(getline(fline), matchexpr), ';')
|
||||||
endif
|
endif
|
||||||
elseif getline('.') =~# 'tmf: ' " We're on the formula line
|
elseif getline('.') =~# 'tmf: ' " We're on the formula line
|
||||||
let line = line('.') - 1
|
let line = line('.') - 1
|
||||||
if tablemode#table#IsHeader(line) | let line -= 1 | endif
|
if tablemode#table#IsBorder(line) | let line -= 1 | endif
|
||||||
if tablemode#table#IsRow(line)
|
if tablemode#table#IsRow(line)
|
||||||
let exprs = split(matchstr(getline('.'), matchexpr), ';')
|
let exprs = split(matchstr(getline('.'), matchexpr), ';')
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -47,7 +47,9 @@ function! s:GenerateHeaderBorder(line) "{{{2
|
|||||||
if tablemode#utils#strlen(line_val) <= 1 | return s:DefaultHeaderBorder() | endif
|
if tablemode#utils#strlen(line_val) <= 1 | return s:DefaultHeaderBorder() | endif
|
||||||
|
|
||||||
let border = substitute(line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)], g:table_mode_separator, g:table_mode_corner, 'g')
|
let border = substitute(line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)], g:table_mode_separator, g:table_mode_corner, 'g')
|
||||||
let border = substitute(border, '[^' . g:table_mode_corner . ']', g:table_mode_fillchar, 'g')
|
" To accurately deal with unicode double width characters
|
||||||
|
let fill_columns = map(split(border, g:table_mode_corner), 'repeat(g:table_mode_fillchar, tablemode#utils#StrDisplayWidth(v:val))')
|
||||||
|
let border = g:table_mode_corner . join(fill_columns, g:table_mode_corner) . g:table_mode_corner
|
||||||
let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_corner_corner . '\1' . g:table_mode_corner_corner, '')
|
let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_corner_corner . '\1' . g:table_mode_corner_corner, '')
|
||||||
|
|
||||||
" Incorporate header alignment chars
|
" Incorporate header alignment chars
|
||||||
@@ -94,24 +96,6 @@ function! tablemode#table#scope() "{{{2
|
|||||||
return s:
|
return s:
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#table#StartCommentExpr() "{{{2
|
|
||||||
let cstartexpr = tablemode#table#GetCommentStart()
|
|
||||||
if tablemode#utils#strlen(cstartexpr) > 0
|
|
||||||
return '^\s*' . cstartexpr . '\s*'
|
|
||||||
else
|
|
||||||
return ''
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! tablemode#table#EndCommentExpr() "{{{2
|
|
||||||
let cendexpr = tablemode#table#GetCommentEnd()
|
|
||||||
if tablemode#utils#strlen(cendexpr) > 0
|
|
||||||
return '.*\zs\s\+' . cendexpr . '\s*$'
|
|
||||||
else
|
|
||||||
return ''
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! tablemode#table#GetCommentStart() "{{{2
|
function! tablemode#table#GetCommentStart() "{{{2
|
||||||
let cstring = &commentstring
|
let cstring = &commentstring
|
||||||
if tablemode#utils#strlen(cstring) > 0
|
if tablemode#utils#strlen(cstring) > 0
|
||||||
@@ -121,6 +105,15 @@ function! tablemode#table#GetCommentStart() "{{{2
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#table#StartCommentExpr() "{{{2
|
||||||
|
let cstartexpr = tablemode#table#GetCommentStart()
|
||||||
|
if tablemode#utils#strlen(cstartexpr) > 0
|
||||||
|
return '^\s*' . cstartexpr . '\s*'
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! tablemode#table#GetCommentEnd() "{{{2
|
function! tablemode#table#GetCommentEnd() "{{{2
|
||||||
let cstring = &commentstring
|
let cstring = &commentstring
|
||||||
if tablemode#utils#strlen(cstring) > 0
|
if tablemode#utils#strlen(cstring) > 0
|
||||||
@@ -135,6 +128,15 @@ function! tablemode#table#GetCommentEnd() "{{{2
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#table#EndCommentExpr() "{{{2
|
||||||
|
let cendexpr = tablemode#table#GetCommentEnd()
|
||||||
|
if tablemode#utils#strlen(cendexpr) > 0
|
||||||
|
return '.*\zs\s\+' . cendexpr . '\s*$'
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! tablemode#table#StartExpr() "{{{2
|
function! tablemode#table#StartExpr() "{{{2
|
||||||
let cstart = tablemode#table#GetCommentStart()
|
let cstart = tablemode#table#GetCommentStart()
|
||||||
if tablemode#utils#strlen(cstart) > 0
|
if tablemode#utils#strlen(cstart) > 0
|
||||||
@@ -153,15 +155,20 @@ function! tablemode#table#EndExpr() "{{{2
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#table#IsHeader(line) "{{{2
|
function! tablemode#table#IsBorder(line) "{{{2
|
||||||
return getline(a:line) =~# s:HeaderBorderExpr()
|
return getline(a:line) =~# s:HeaderBorderExpr()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#table#IsRow(line) "{{{2
|
function! tablemode#table#IsHeader(line) "{{{2
|
||||||
return !tablemode#table#IsHeader(a:line) && getline(a:line) =~# (tablemode#table#StartExpr() . g:table_mode_separator)
|
let line = tablemode#utils#line(a:line)
|
||||||
|
return tablemode#table#IsBorder(line+1) && !tablemode#table#IsRow(line-1) && !tablemode#table#IsRow(line-2)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#table#AddHeaderBorder(line) "{{{2
|
function! tablemode#table#IsRow(line) "{{{2
|
||||||
|
return !tablemode#table#IsBorder(a:line) && getline(a:line) =~# (tablemode#table#StartExpr() . g:table_mode_separator)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#table#AddBorder(line) "{{{2
|
||||||
call setline(a:line, s:GenerateHeaderBorder(a:line))
|
call setline(a:line, s:GenerateHeaderBorder(a:line))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -170,8 +177,8 @@ function! tablemode#table#Realign(line) "{{{2
|
|||||||
|
|
||||||
let lines = []
|
let lines = []
|
||||||
let [lnum, blines] = [line, []]
|
let [lnum, blines] = [line, []]
|
||||||
while tablemode#table#IsRow(lnum) || tablemode#table#IsHeader(lnum)
|
while tablemode#table#IsRow(lnum) || tablemode#table#IsBorder(lnum)
|
||||||
if tablemode#table#IsHeader(lnum)
|
if tablemode#table#IsBorder(lnum)
|
||||||
call insert(blines, lnum)
|
call insert(blines, lnum)
|
||||||
let lnum -= 1
|
let lnum -= 1
|
||||||
continue
|
continue
|
||||||
@@ -181,8 +188,8 @@ function! tablemode#table#Realign(line) "{{{2
|
|||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
let lnum = line + 1
|
let lnum = line + 1
|
||||||
while tablemode#table#IsRow(lnum) || tablemode#table#IsHeader(lnum)
|
while tablemode#table#IsRow(lnum) || tablemode#table#IsBorder(lnum)
|
||||||
if tablemode#table#IsHeader(lnum)
|
if tablemode#table#IsBorder(lnum)
|
||||||
call add(blines, lnum)
|
call add(blines, lnum)
|
||||||
let lnum += 1
|
let lnum += 1
|
||||||
continue
|
continue
|
||||||
@@ -198,6 +205,6 @@ function! tablemode#table#Realign(line) "{{{2
|
|||||||
endfor
|
endfor
|
||||||
|
|
||||||
for bline in blines
|
for bline in blines
|
||||||
call tablemode#table#AddHeaderBorder(bline)
|
call tablemode#table#AddBorder(bline)
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -51,3 +51,27 @@ endfunction
|
|||||||
function! tablemode#utils#strlen(text)
|
function! tablemode#utils#strlen(text)
|
||||||
return strlen(substitute(a:text, '.', 'x', 'g'))
|
return strlen(substitute(a:text, '.', 'x', 'g'))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#utils#StrDisplayWidth(string) "{{{2
|
||||||
|
if exists('*strdisplaywidth')
|
||||||
|
return strdisplaywidth(a:string)
|
||||||
|
else
|
||||||
|
" Implement the tab handling part of strdisplaywidth for vim 7.2 and
|
||||||
|
" earlier - not much that can be done about handling doublewidth
|
||||||
|
" characters.
|
||||||
|
let rv = 0
|
||||||
|
let i = 0
|
||||||
|
|
||||||
|
for char in split(a:string, '\zs')
|
||||||
|
if char == "\t"
|
||||||
|
let rv += &ts - i
|
||||||
|
let i = 0
|
||||||
|
else
|
||||||
|
let rv += 1
|
||||||
|
let i = (i + 1) % &ts
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return rv
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
*table-mode.txt* Table Mode for easy table formatting. v4.4.0
|
*table-mode.txt* Table Mode for easy table formatting. v4.5.0
|
||||||
===============================================================================
|
===============================================================================
|
||||||
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
|
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
|
||||||
VERSION 4.4.0
|
VERSION 4.5.0
|
||||||
|
|
||||||
Author: Dhruva Sagar <http://dhruvasagar.com/>
|
Author: Dhruva Sagar <http://dhruvasagar.com/>
|
||||||
License: MIT <http://opensource.org/licenses/MIT/>
|
License: MIT <http://opensource.org/licenses/MIT/>
|
||||||
@@ -119,7 +119,7 @@ Formula Expressions :
|
|||||||
special functions 'Sum' and 'Average'. Both these functions take a
|
special functions 'Sum' and 'Average'. Both these functions take a
|
||||||
range as input. A range can be of two forms :
|
range as input. A range can be of two forms :
|
||||||
|
|
||||||
'n,m': This represents cells in the current column from row
|
'n:m': This represents cells in the current column from row
|
||||||
'n' through 'm'. If 'm' is negative it represents 'm' row
|
'n' through 'm'. If 'm' is negative it represents 'm' row
|
||||||
above the current row (of the target cell).
|
above the current row (of the target cell).
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,12 @@ function! s:TableEchoCell() "{{{1
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
augroup TableMode
|
||||||
|
au!
|
||||||
|
|
||||||
|
autocmd Syntax * if tablemode#IsActive() | call tablemode#SyntaxEnable() | endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
" Define Commands & Mappings {{{1
|
" Define Commands & Mappings {{{1
|
||||||
if !g:table_mode_always_active "{{{2
|
if !g:table_mode_always_active "{{{2
|
||||||
exec "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_toggle_map .
|
exec "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_toggle_map .
|
||||||
@@ -73,6 +79,10 @@ command! TableAddFormula call tablemode#spreadsheet#formula#Add()
|
|||||||
command! TableModeRealign call tablemode#table#Realign('.')
|
command! TableModeRealign call tablemode#table#Realign('.')
|
||||||
command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine()
|
command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine()
|
||||||
|
|
||||||
|
" '|' is a special character, we need to map <Bar> instead
|
||||||
|
if g:table_mode_separator ==# '|' | let separator_map = '<Bar>' | endif
|
||||||
|
execute 'inoremap <silent> <Plug>(table-mode-tableize)' separator_map . '<Esc>:call tablemode#TableizeInsertMode()<CR>a'
|
||||||
|
|
||||||
nnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
|
nnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
|
||||||
xnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
|
xnoremap <silent> <Plug>(table-mode-tableize) :Tableize<CR>
|
||||||
xnoremap <silent> <Plug>(table-mode-tableize-delimiter) :<C-U>call tablemode#TableizeByDelimiter()<CR>
|
xnoremap <silent> <Plug>(table-mode-tableize-delimiter) :<C-U>call tablemode#TableizeByDelimiter()<CR>
|
||||||
@@ -86,6 +96,8 @@ nnoremap <silent> <Plug>(table-mode-motion-right) :<C-U>call tablemode#spreadshe
|
|||||||
|
|
||||||
onoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
|
onoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
|
||||||
onoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
|
onoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
|
||||||
|
xnoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
|
||||||
|
xnoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
|
||||||
|
|
||||||
nnoremap <silent> <Plug>(table-mode-delete-row) :call tablemode#spreadsheet#DeleteRow()<CR>
|
nnoremap <silent> <Plug>(table-mode-delete-row) :call tablemode#spreadsheet#DeleteRow()<CR>
|
||||||
nnoremap <silent> <Plug>(table-mode-delete-column) :call tablemode#spreadsheet#DeleteColumn()<CR>
|
nnoremap <silent> <Plug>(table-mode-delete-column) :call tablemode#spreadsheet#DeleteColumn()<CR>
|
||||||
@@ -104,48 +116,6 @@ if !hasmapto('<Plug>(table-mode-tableize-delimiter)')
|
|||||||
xmap <Leader>T <Plug>(table-mode-tableize-delimiter)
|
xmap <Leader>T <Plug>(table-mode-tableize-delimiter)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !hasmapto('<Plug>(table-mode-realign)')
|
|
||||||
nmap <Leader>tr <Plug>(table-mode-realign)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>(table-mode-motion-up)')
|
|
||||||
nmap {<Bar> <Plug>(table-mode-motion-up)
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>(table-mode-motion-down)')
|
|
||||||
nmap }<Bar> <Plug>(table-mode-motion-down)
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>(table-mode-motion-left)')
|
|
||||||
nmap [<Bar> <Plug>(table-mode-motion-left)
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>(table-mode-motion-right)')
|
|
||||||
nmap ]<Bar> <Plug>(table-mode-motion-right)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>(table-mode-cell-text-object-a)')
|
|
||||||
omap a<Bar> <Plug>(table-mode-cell-text-object-a)
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>(table-mode-cell-text-object-i)')
|
|
||||||
omap i<Bar> <Plug>(table-mode-cell-text-object-i)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>(table-mode-delete-row)')
|
|
||||||
nmap <Leader>tdd <Plug>(table-mode-delete-row)
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>(table-mode-delete-column)')
|
|
||||||
nmap <Leader>tdc <Plug>(table-mode-delete-column)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>(table-mode-add-formula)')
|
|
||||||
nmap <Leader>tfa <Plug>(table-mode-add-formula)
|
|
||||||
endif
|
|
||||||
if !hasmapto('<Plug>(table-mode-eval-formula)')
|
|
||||||
nmap <Leader>tfe <Plug>(table-mode-eval-formula)
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !hasmapto('<Plug>(table-mode-echo-cell)')
|
|
||||||
nmap <Leader>t? <Plug>(table-mode-echo-cell)
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Avoiding side effects {{{1
|
" Avoiding side effects {{{1
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
|
|
||||||
|
|||||||
32
t/cell.vim
32
t/cell.vim
@@ -10,7 +10,7 @@ describe 'cell'
|
|||||||
read t/fixtures/sample.txt
|
read t/fixtures/sample.txt
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return the cells'
|
it 'should return the cells with GetCells'
|
||||||
Expect tablemode#spreadsheet#cell#GetCells(2, 1, 1) ==# 'test11'
|
Expect tablemode#spreadsheet#cell#GetCells(2, 1, 1) ==# 'test11'
|
||||||
" Get Rows
|
" Get Rows
|
||||||
Expect tablemode#spreadsheet#cell#GetCells(2, 1) == ['test11', 'test12']
|
Expect tablemode#spreadsheet#cell#GetCells(2, 1) == ['test11', 'test12']
|
||||||
@@ -20,7 +20,17 @@ describe 'cell'
|
|||||||
Expect tablemode#spreadsheet#cell#GetCells(2, 0, 2) == ['test12', 'test22']
|
Expect tablemode#spreadsheet#cell#GetCells(2, 0, 2) == ['test12', 'test22']
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return the cells in a range'
|
it 'should return the row with GetRow'
|
||||||
|
Expect tablemode#spreadsheet#cell#GetRow(1, 2) == ['test11', 'test12']
|
||||||
|
Expect tablemode#spreadsheet#cell#GetRow(2, 2) == ['test21', 'test22']
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the column with GetColumn'
|
||||||
|
Expect tablemode#spreadsheet#cell#GetColumn(1, 2) == ['test11', 'test21']
|
||||||
|
Expect tablemode#spreadsheet#cell#GetColumn(2, 2) == ['test12', 'test22']
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the cells in a range with GetCellRange'
|
||||||
" Entire table as range
|
" Entire table as range
|
||||||
Expect tablemode#spreadsheet#cell#GetCellRange('1,1:2,2', 2, 1) == [['test11', 'test21'], ['test12', 'test22']]
|
Expect tablemode#spreadsheet#cell#GetCellRange('1,1:2,2', 2, 1) == [['test11', 'test21'], ['test12', 'test22']]
|
||||||
|
|
||||||
@@ -54,20 +64,19 @@ describe 'cell'
|
|||||||
before
|
before
|
||||||
new
|
new
|
||||||
normal! ggdG
|
normal! ggdG
|
||||||
call tablemode#Enable()
|
read t/fixtures/sample.txt
|
||||||
normal i|test11|test12|
|
call cursor(2, 3)
|
||||||
|test21|test22|
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should move left when not on first column'
|
it 'should move left when not on first column'
|
||||||
it 'should move left when not on first column'
|
call cursor(2, 12)
|
||||||
Expect tablemode#spreadsheet#ColumnNr('.') == 2
|
Expect tablemode#spreadsheet#ColumnNr('.') == 2
|
||||||
call tablemode#spreadsheet#cell#Motion('h')
|
call tablemode#spreadsheet#cell#Motion('h')
|
||||||
Expect tablemode#spreadsheet#ColumnNr('.') == 1
|
Expect tablemode#spreadsheet#ColumnNr('.') == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should move to the previous row last column if it exists when on first column'
|
it 'should move to the previous row last column if it exists when on first column'
|
||||||
it 'should move to the previous row last column if it exists when on first column'
|
call cursor(3, 3)
|
||||||
Expect tablemode#spreadsheet#RowNr('.') == 2
|
Expect tablemode#spreadsheet#RowNr('.') == 2
|
||||||
Expect tablemode#spreadsheet#ColumnNr('.') == 1
|
Expect tablemode#spreadsheet#ColumnNr('.') == 1
|
||||||
call tablemode#spreadsheet#cell#Motion('h')
|
call tablemode#spreadsheet#cell#Motion('h')
|
||||||
@@ -82,7 +91,7 @@ describe 'cell'
|
|||||||
end
|
end
|
||||||
|
|
||||||
it 'should move to the next row first column if it exists when on last column'
|
it 'should move to the next row first column if it exists when on last column'
|
||||||
it 'should move to the next row first column if it exists when on last column'
|
call cursor(2, 12)
|
||||||
Expect tablemode#spreadsheet#RowNr('.') == 1
|
Expect tablemode#spreadsheet#RowNr('.') == 1
|
||||||
Expect tablemode#spreadsheet#ColumnNr('.') == 2
|
Expect tablemode#spreadsheet#ColumnNr('.') == 2
|
||||||
call tablemode#spreadsheet#cell#Motion('l')
|
call tablemode#spreadsheet#cell#Motion('l')
|
||||||
@@ -95,13 +104,12 @@ describe 'cell'
|
|||||||
before
|
before
|
||||||
new
|
new
|
||||||
normal! ggdG
|
normal! ggdG
|
||||||
normal! ggdG
|
read t/fixtures/sample.txt
|
||||||
call tablemode#Enable()
|
call cursor(2, 3)
|
||||||
normal i|test11|test12|
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should move a row up unless on first row'
|
it 'should move a row up unless on first row'
|
||||||
|
call cursor(3, 3)
|
||||||
Expect tablemode#spreadsheet#RowNr('.') == 2
|
Expect tablemode#spreadsheet#RowNr('.') == 2
|
||||||
call tablemode#spreadsheet#cell#Motion('k')
|
call tablemode#spreadsheet#cell#Motion('k')
|
||||||
Expect tablemode#spreadsheet#RowNr('.') == 1
|
Expect tablemode#spreadsheet#RowNr('.') == 1
|
||||||
|
|||||||
2
t/fixtures/cell/sample.txt
Normal file
2
t/fixtures/cell/sample.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
| 1 | 2 |
|
||||||
|
| 3 | 4 |
|
||||||
4
t/fixtures/table/sample.txt
Normal file
4
t/fixtures/table/sample.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
| test11 | test12 |
|
||||||
|
| test21 | test22 |
|
||||||
|
|
||||||
3
t/fixtures/table/sample_for_header.txt
Normal file
3
t/fixtures/table/sample_for_header.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
| test11 | test12 |
|
||||||
|
|
||||||
|
| test21 | test22 |
|
||||||
9
t/fixtures/table/sample_for_header_unicode.txt
Normal file
9
t/fixtures/table/sample_for_header_unicode.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
| abc | 测试长度 | 长测试 |
|
||||||
|
|
||||||
|
| 长 | 测试测试测试测试 | 测试测试 |
|
||||||
|
|
||||||
|
| 测试测试 | 测试 | 测试测测试 |
|
||||||
|
|
||||||
|
| 测试测试测试 | 测试测试 | 测试 |
|
||||||
|
|
||||||
4
t/fixtures/table/sample_header_realign_after.txt
Normal file
4
t/fixtures/table/sample_header_realign_after.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
| Title | Message |
|
||||||
|
|------:+--------:|
|
||||||
|
| t1 | msg1 |
|
||||||
|
| t2 | msg2 |
|
||||||
4
t/fixtures/table/sample_header_realign_before.txt
Normal file
4
t/fixtures/table/sample_header_realign_before.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
| Title | Message |
|
||||||
|
|------:+--------:|
|
||||||
|
| t1 | msg1 |
|
||||||
|
| t2 | msg2 |
|
||||||
8
t/fixtures/table/sample_header_realign_unicode_after.txt
Normal file
8
t/fixtures/table/sample_header_realign_unicode_after.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|--------------+------------------+------------|
|
||||||
|
| 测试测试 | 测试长度 | 长测试 |
|
||||||
|
|--------------+------------------+-----------:|
|
||||||
|
| abc | 测试长度 | 长测试 |
|
||||||
|
| 长 | 测试测试测试测试 | 测试测试 |
|
||||||
|
| 测试测试 | 测试 | 测试测测试 |
|
||||||
|
| 测试测试测试 | 测试测试 | 测试 |
|
||||||
|
|--------------+------------------+------------|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
|--------+--------+------|
|
||||||
|
|测试测试|测试长度|长测试|
|
||||||
|
|--------+--------+-----:|
|
||||||
|
|abc|测试长度|长测试|
|
||||||
|
|长|测试测试测试测试|测试测试|
|
||||||
|
|测试测试|测试|测试测测试|
|
||||||
|
|测试测试测试|测试测试|测试|
|
||||||
|
|------------+--------+----|
|
||||||
2
t/fixtures/table/sample_realign_after.txt
Normal file
2
t/fixtures/table/sample_realign_after.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
| test11 | test12 |
|
||||||
|
| test21 | test22 |
|
||||||
2
t/fixtures/table/sample_realign_before.txt
Normal file
2
t/fixtures/table/sample_realign_before.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|test11|test12|
|
||||||
|
|test21|test22|
|
||||||
4
t/fixtures/table/sample_realign_unicode_after.txt
Normal file
4
t/fixtures/table/sample_realign_unicode_after.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
| abc | 测试长度 | 长测试 |
|
||||||
|
| 长 | 测试测试测试测试 | 测试测试 |
|
||||||
|
| 测试测试 | 测试 | 测试测测试 |
|
||||||
|
| 测试测试测试 | 测试测试 | 测试 |
|
||||||
4
t/fixtures/table/sample_realign_unicode_before.txt
Normal file
4
t/fixtures/table/sample_realign_unicode_before.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
|abc|测试长度|长测试|
|
||||||
|
|长|测试测试测试测试|测试测试|
|
||||||
|
|测试测试|测试|测试测测试|
|
||||||
|
|测试测试测试|测试测试|测试|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
|
|--------+---------|
|
||||||
| Title | Message |
|
| Title | Message |
|
||||||
|--------+---------|
|
|--------+---------|
|
||||||
| test11 | test12 |
|
| test11 | test12 |
|
||||||
@@ -25,6 +25,27 @@ describe 'spreadsheet'
|
|||||||
Expect tablemode#spreadsheet#ColumnCount(3) == 2
|
Expect tablemode#spreadsheet#ColumnCount(3) == 2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should return the column number'
|
||||||
|
call cursor(2,3)
|
||||||
|
Expect tablemode#spreadsheet#ColumnNr('.') == 1
|
||||||
|
call cursor(2,12)
|
||||||
|
Expect tablemode#spreadsheet#ColumnNr('.') == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return true when in the first cell'
|
||||||
|
call cursor(2,3)
|
||||||
|
Expect tablemode#spreadsheet#IsFirstCell() to_be_true
|
||||||
|
call cursor(2,12)
|
||||||
|
Expect tablemode#spreadsheet#IsFirstCell() to_be_false
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return true when in the last cell'
|
||||||
|
call cursor(2,3)
|
||||||
|
Expect tablemode#spreadsheet#IsLastCell() to_be_false
|
||||||
|
call cursor(2,12)
|
||||||
|
Expect tablemode#spreadsheet#IsLastCell() to_be_true
|
||||||
|
end
|
||||||
|
|
||||||
it 'should return the line number of the first row'
|
it 'should return the line number of the first row'
|
||||||
Expect tablemode#spreadsheet#GetFirstRow(2) == 2
|
Expect tablemode#spreadsheet#GetFirstRow(2) == 2
|
||||||
Expect tablemode#spreadsheet#GetFirstRow(3) == 2
|
Expect tablemode#spreadsheet#GetFirstRow(3) == 2
|
||||||
@@ -34,13 +55,41 @@ describe 'spreadsheet'
|
|||||||
Expect tablemode#spreadsheet#GetLastRow(2) == 3
|
Expect tablemode#spreadsheet#GetLastRow(2) == 3
|
||||||
Expect tablemode#spreadsheet#GetLastRow(3) == 3
|
Expect tablemode#spreadsheet#GetLastRow(3) == 3
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'Math'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
read t/fixtures/cell/sample.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the sum of cell range'
|
||||||
|
call cursor(1,3)
|
||||||
|
Expect tablemode#spreadsheet#Sum('1:2') == 4.0
|
||||||
|
Expect tablemode#spreadsheet#Sum('1,1:1,2') == 3.0
|
||||||
|
Expect tablemode#spreadsheet#Sum('1,1:2,2') == 10.0
|
||||||
|
call cursor(2,7)
|
||||||
|
Expect tablemode#spreadsheet#Sum('1:2') == 6.0
|
||||||
|
Expect tablemode#spreadsheet#Sum('2,1:2,2') == 7.0
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the average of cell range'
|
||||||
|
call cursor(1,3)
|
||||||
|
Expect tablemode#spreadsheet#Average('1:2') == 2.0
|
||||||
|
Expect tablemode#spreadsheet#Average('1,1:1,2') == 1.5
|
||||||
|
Expect tablemode#spreadsheet#Average('1,1:2,2') == 5.0
|
||||||
|
call cursor(2,7)
|
||||||
|
Expect tablemode#spreadsheet#Average('1:2') == 3.0
|
||||||
|
Expect tablemode#spreadsheet#Average('2,1:2,2') == 3.5
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'Manipulations'
|
describe 'Manipulations'
|
||||||
before
|
before
|
||||||
new
|
new
|
||||||
normal i|test11|test12|
|
normal! ggdG
|
||||||
|test21|test22|
|
read t/fixtures/sample.txt
|
||||||
|
call cursor(2, 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should delete a row successfully'
|
it 'should delete a row successfully'
|
||||||
|
|||||||
163
t/table.vim
163
t/table.vim
@@ -4,40 +4,159 @@ source t/config/options.vim
|
|||||||
call vspec#hint({'scope': 'tablemode#table#scope()', 'sid': 'tablemode#table#sid()'})
|
call vspec#hint({'scope': 'tablemode#table#scope()', 'sid': 'tablemode#table#sid()'})
|
||||||
|
|
||||||
describe 'table'
|
describe 'table'
|
||||||
describe 'API'
|
describe 'IsRow'
|
||||||
describe 'IsRow'
|
before
|
||||||
|
new
|
||||||
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be true when on a table row'
|
||||||
|
Expect tablemode#table#IsRow(2) to_be_true
|
||||||
|
Expect tablemode#table#IsRow(3) to_be_true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be false when not on a table row'
|
||||||
|
Expect tablemode#table#IsRow(1) to_be_false
|
||||||
|
Expect tablemode#table#IsRow(4) to_be_false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'IsBorder'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_with_header.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be true on a table border'
|
||||||
|
Expect tablemode#table#IsBorder(1) to_be_true
|
||||||
|
Expect tablemode#table#IsBorder(3) to_be_true
|
||||||
|
Expect tablemode#table#IsBorder(6) to_be_true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be false when not on a table border'
|
||||||
|
Expect tablemode#table#IsBorder(2) to_be_false
|
||||||
|
Expect tablemode#table#IsBorder(4) to_be_false
|
||||||
|
Expect tablemode#table#IsBorder(5) to_be_false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'IsHeader'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_with_header.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be true on the table header'
|
||||||
|
Expect tablemode#table#IsHeader(2) to_be_true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be false anywhere else'
|
||||||
|
Expect tablemode#table#IsHeader(1) to_be_false
|
||||||
|
Expect tablemode#table#IsHeader(4) to_be_false
|
||||||
|
Expect tablemode#table#IsHeader(5) to_be_false
|
||||||
|
Expect tablemode#table#IsHeader(6) to_be_false
|
||||||
|
Expect tablemode#table#IsHeader(7) to_be_false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'AddBorder'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_for_header.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should add border to line'
|
||||||
|
call tablemode#table#AddBorder(2)
|
||||||
|
Expect tablemode#table#IsHeader(1) to_be_true
|
||||||
|
Expect tablemode#table#IsBorder(2) to_be_true
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'for unicode'
|
||||||
before
|
before
|
||||||
new
|
new
|
||||||
read t/fixtures/sample.txt
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_for_header_unicode.txt
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return true when inside a table'
|
it 'should add border to line'
|
||||||
Expect tablemode#table#IsRow(2) to_be_true
|
call tablemode#table#AddBorder(1)
|
||||||
Expect tablemode#table#IsRow(3) to_be_true
|
call tablemode#table#AddBorder(3)
|
||||||
|
call tablemode#table#AddBorder(5)
|
||||||
|
call tablemode#table#AddBorder(7)
|
||||||
|
call tablemode#table#AddBorder(9)
|
||||||
|
|
||||||
|
Expect tablemode#table#IsBorder(1) to_be_true
|
||||||
|
Expect tablemode#utils#StrDisplayWidth(getline(1)) == tablemode#utils#StrDisplayWidth(getline(2))
|
||||||
|
Expect tablemode#table#IsBorder(3) to_be_true
|
||||||
|
Expect tablemode#utils#StrDisplayWidth(getline(3)) == tablemode#utils#StrDisplayWidth(getline(4))
|
||||||
|
Expect tablemode#table#IsBorder(5) to_be_true
|
||||||
|
Expect tablemode#utils#StrDisplayWidth(getline(5)) == tablemode#utils#StrDisplayWidth(getline(6))
|
||||||
|
Expect tablemode#table#IsBorder(7) to_be_true
|
||||||
|
Expect tablemode#utils#StrDisplayWidth(getline(7)) == tablemode#utils#StrDisplayWidth(getline(8))
|
||||||
|
Expect tablemode#table#IsBorder(9) to_be_true
|
||||||
|
Expect tablemode#utils#StrDisplayWidth(getline(9)) == tablemode#utils#StrDisplayWidth(getline(8))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'Realign'
|
||||||
|
describe 'without header alignments'
|
||||||
|
describe 'for simple'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_realign_before.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be aligned properly'
|
||||||
|
call tablemode#table#Realign(1)
|
||||||
|
Expect getline(1,'$') == readfile('t/fixtures/table/sample_realign_after.txt')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return false when outside a table'
|
describe 'for unicode'
|
||||||
Expect tablemode#table#IsRow(1) to_be_false
|
before
|
||||||
Expect tablemode#table#IsRow(4) to_be_false
|
new
|
||||||
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_realign_unicode_before.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be aligned properly'
|
||||||
|
call tablemode#table#Realign(1)
|
||||||
|
Expect getline(1,'$') == readfile('t/fixtures/table/sample_realign_unicode_after.txt')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'IsHeader'
|
describe 'with header alignments'
|
||||||
before
|
describe 'for simple'
|
||||||
new
|
before
|
||||||
read t/fixtures/sample_with_header.txt
|
new
|
||||||
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_header_realign_before.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should be aligned properly'
|
||||||
|
call tablemode#table#Realign(1)
|
||||||
|
Expect getline(1,'$') == readfile('t/fixtures/table/sample_header_realign_after.txt')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return true when on a table header'
|
describe 'for unicode'
|
||||||
Expect tablemode#table#IsHeader(3) to_be_true
|
before
|
||||||
Expect tablemode#table#IsHeader(6) to_be_true
|
new
|
||||||
end
|
normal! ggdG
|
||||||
|
read t/fixtures/table/sample_header_realign_unicode_before.txt
|
||||||
|
end
|
||||||
|
|
||||||
it 'should return false when not on a table header'
|
it 'should be aligned properly'
|
||||||
Expect tablemode#table#IsHeader(1) to_be_false
|
call tablemode#table#Realign(1)
|
||||||
Expect tablemode#table#IsHeader(2) to_be_false
|
Expect getline(1,'$') == readfile('t/fixtures/table/sample_header_realign_unicode_after.txt')
|
||||||
Expect tablemode#table#IsHeader(4) to_be_false
|
end
|
||||||
Expect tablemode#table#IsHeader(5) to_be_false
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
62
t/utils.vim
62
t/utils.vim
@@ -3,31 +3,45 @@ source t/config/options.vim
|
|||||||
|
|
||||||
call vspec#hint({'scope': 'tablemode#utils#scope()', 'sid': 'tablemode#utils#sid()'})
|
call vspec#hint({'scope': 'tablemode#utils#scope()', 'sid': 'tablemode#utils#sid()'})
|
||||||
|
|
||||||
describe 'line'
|
describe 'utils'
|
||||||
it 'should return the current line number'
|
describe 'line'
|
||||||
Expect tablemode#utils#line('.') == line('.')
|
it 'should return the current line number'
|
||||||
|
Expect tablemode#utils#line('.') == line('.')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the line number itself if it is a number'
|
||||||
|
Expect tablemode#utils#line(1) == 1
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return the line number itself if it is a number'
|
describe 'strip'
|
||||||
Expect tablemode#utils#line(1) == 1
|
it 'should strip all initial or trailing whitespace from a string'
|
||||||
end
|
let string = ' This is awesome '
|
||||||
end
|
Expect tablemode#utils#strip(string) == 'This is awesome'
|
||||||
|
end
|
||||||
describe 'strip'
|
end
|
||||||
it 'should strip all initial or trailing whitespace from a string'
|
|
||||||
let string = ' This is awesome '
|
describe 'strlen'
|
||||||
Expect tablemode#utils#strip(string) == 'This is awesome'
|
it 'should return the length of a string correctly'
|
||||||
end
|
let string = 'this is a test'
|
||||||
end
|
Expect tablemode#utils#strlen(string) == 14
|
||||||
|
end
|
||||||
describe 'strlen'
|
|
||||||
it 'should return the length of a string correctly'
|
it 'should return the length of a unicode string correctly'
|
||||||
let string = 'this is a test'
|
let string = '測試 is good.'
|
||||||
Expect tablemode#utils#strlen(string) == 14
|
Expect tablemode#utils#strlen(string) == 11
|
||||||
end
|
end
|
||||||
|
end
|
||||||
it 'should return the length of a unicode string correctly'
|
|
||||||
let string = '測試 is good.'
|
describe 'strdisplaywidth'
|
||||||
Expect tablemode#utils#strlen(string) == 11
|
it 'should return the display width of a string correctly'
|
||||||
|
let string = 'this is a test'
|
||||||
|
Expect tablemode#utils#StrDisplayWidth(string) == 14
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return the display width of a unicode string correctly'
|
||||||
|
let string = '測試 is good.'
|
||||||
|
Expect tablemode#utils#StrDisplayWidth(string) == 13
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user