mirror of
https://github.com/dhruvasagar/vim-table-mode.git
synced 2025-11-11 20:43:47 -05:00
Minor refactor & improved test coverage
This commit is contained in:
@@ -93,7 +93,7 @@ endfunction
|
||||
|
||||
function! tablemode#align#alignments(lnum, ncols) "{{{2
|
||||
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 . ']')
|
||||
for idx in range(len(hcols))
|
||||
" Right align if header
|
||||
|
||||
@@ -50,10 +50,10 @@ function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
|
||||
if tablemode#table#IsRow(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
|
||||
endwhile
|
||||
if tablemode#table#IsHeader(line) | let line += 1 | endif
|
||||
if tablemode#table#IsBorder(line) | let line += 1 | endif
|
||||
|
||||
return line
|
||||
endif
|
||||
@@ -69,10 +69,10 @@ function! tablemode#spreadsheet#GetLastRow(line) "{{{2
|
||||
if tablemode#table#IsRow(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
|
||||
endwhile
|
||||
if tablemode#table#IsHeader(line) | let line -= 1 | endif
|
||||
if tablemode#table#IsBorder(line) | let line -= 1 | endif
|
||||
|
||||
return line
|
||||
endif
|
||||
@@ -89,7 +89,7 @@ function! tablemode#spreadsheet#LineNr(row) "{{{2
|
||||
let line = tablemode#spreadsheet#GetFirstRow('.')
|
||||
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)
|
||||
let row_nr += 1
|
||||
if row ==# row_nr | break | endif
|
||||
@@ -105,7 +105,7 @@ function! tablemode#spreadsheet#RowNr(line) "{{{2
|
||||
let line = tablemode#utils#line(a:line)
|
||||
|
||||
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
|
||||
let line -= 1
|
||||
endwhile
|
||||
@@ -117,13 +117,13 @@ function! tablemode#spreadsheet#RowCount(line) "{{{2
|
||||
let line = tablemode#utils#line(a:line)
|
||||
|
||||
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
|
||||
let tline -= 1
|
||||
endwhile
|
||||
|
||||
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
|
||||
let tline += 1
|
||||
endwhile
|
||||
@@ -166,27 +166,27 @@ function! tablemode#spreadsheet#MoveToStartOfCell() "{{{2
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tablemode#spreadsheet#GetLastRow(line) "{{{2
|
||||
function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
|
||||
if tablemode#table#IsRow(a:line)
|
||||
let line = tablemode#utils#line(a:line)
|
||||
|
||||
while tablemode#table#IsRow(line + 1) || tablemode#table#IsHeader(line + 1)
|
||||
let line += 1
|
||||
while tablemode#table#IsRow(line - 1) || tablemode#table#IsBorder(line - 1)
|
||||
let line -= 1
|
||||
endwhile
|
||||
if tablemode#table#IsHeader(line) | let line -= 1 | endif
|
||||
if tablemode#table#IsBorder(line) | let line += 1 | endif
|
||||
|
||||
return line
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tablemode#spreadsheet#GetFirstRow(line) "{{{2
|
||||
function! tablemode#spreadsheet#GetLastRow(line) "{{{2
|
||||
if tablemode#table#IsRow(a:line)
|
||||
let line = tablemode#utils#line(a:line)
|
||||
|
||||
while tablemode#table#IsRow(line - 1) || tablemode#table#IsHeader(line - 1)
|
||||
let line -= 1
|
||||
while tablemode#table#IsRow(line + 1) || tablemode#table#IsBorder(line + 1)
|
||||
let line += 1
|
||||
endwhile
|
||||
if tablemode#table#IsHeader(line) | let line += 1 | endif
|
||||
if tablemode#table#IsBorder(line) | let line -= 1 | endif
|
||||
|
||||
return line
|
||||
endif
|
||||
|
||||
@@ -85,7 +85,7 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
|
||||
if row == 0
|
||||
let values = []
|
||||
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)
|
||||
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, '')))
|
||||
@@ -97,7 +97,7 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
|
||||
let row_nr = 0
|
||||
let row_diff = row > 0 ? 1 : -1
|
||||
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)
|
||||
let row_nr += row_diff
|
||||
if row ==# row_nr | break | endif
|
||||
@@ -127,10 +127,27 @@ function! tablemode#spreadsheet#cell#GetCell(...) "{{{2
|
||||
endfunction
|
||||
|
||||
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)
|
||||
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
|
||||
if a:0 < 1
|
||||
let [line, colm] = ['.', tablemode#spreadsheet#ColumnNr('.')]
|
||||
@@ -169,23 +186,6 @@ function! tablemode#spreadsheet#cell#GetCellRange(range, ...) abort "{{{2
|
||||
return values
|
||||
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
|
||||
if a:0 == 0
|
||||
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)
|
||||
if a:direction ==# 'l'
|
||||
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
|
||||
endif
|
||||
call tablemode#spreadsheet#cell#Motion('j', 1)
|
||||
@@ -248,7 +248,7 @@ function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
|
||||
endif
|
||||
elseif a:direction ==# 'h'
|
||||
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
|
||||
endif
|
||||
call tablemode#spreadsheet#cell#Motion('k', 1)
|
||||
@@ -265,7 +265,7 @@ function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
|
||||
if tablemode#table#IsRow(line('.') + 1)
|
||||
" execute 'normal! ' . 1 . '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'
|
||||
normal! 2j
|
||||
endif
|
||||
@@ -273,7 +273,7 @@ function! tablemode#spreadsheet#cell#Motion(direction, ...) "{{{2
|
||||
if tablemode#table#IsRow(line('.') - 1)
|
||||
" execute 'normal! ' . 1 . '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'
|
||||
normal! 2k
|
||||
endif
|
||||
|
||||
@@ -39,7 +39,7 @@ function! tablemode#spreadsheet#formula#Add(...) "{{{2
|
||||
if fr !=# ''
|
||||
let fr = '$' . row . ',' . colm . '=' . fr
|
||||
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('.')]
|
||||
if getline(fline) =~# 'tmf: '
|
||||
" Comment line correctly
|
||||
@@ -129,13 +129,13 @@ function! tablemode#spreadsheet#formula#EvaluateFormulaLine() abort "{{{2
|
||||
if tablemode#table#IsRow('.') " We're inside the table
|
||||
let line = tablemode#spreadsheet#GetLastRow('.')
|
||||
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: '
|
||||
let exprs = split(matchstr(getline(fline), matchexpr), ';')
|
||||
endif
|
||||
elseif getline('.') =~# 'tmf: ' " We're on the formula line
|
||||
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)
|
||||
let exprs = split(matchstr(getline('.'), matchexpr), ';')
|
||||
endif
|
||||
|
||||
@@ -96,24 +96,6 @@ function! tablemode#table#scope() "{{{2
|
||||
return s:
|
||||
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
|
||||
let cstring = &commentstring
|
||||
if tablemode#utils#strlen(cstring) > 0
|
||||
@@ -123,6 +105,15 @@ function! tablemode#table#GetCommentStart() "{{{2
|
||||
endif
|
||||
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
|
||||
let cstring = &commentstring
|
||||
if tablemode#utils#strlen(cstring) > 0
|
||||
@@ -137,6 +128,15 @@ function! tablemode#table#GetCommentEnd() "{{{2
|
||||
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#StartExpr() "{{{2
|
||||
let cstart = tablemode#table#GetCommentStart()
|
||||
if tablemode#utils#strlen(cstart) > 0
|
||||
@@ -155,15 +155,20 @@ function! tablemode#table#EndExpr() "{{{2
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tablemode#table#IsHeader(line) "{{{2
|
||||
function! tablemode#table#IsBorder(line) "{{{2
|
||||
return getline(a:line) =~# s:HeaderBorderExpr()
|
||||
endfunction
|
||||
|
||||
function! tablemode#table#IsRow(line) "{{{2
|
||||
return !tablemode#table#IsHeader(a:line) && getline(a:line) =~# (tablemode#table#StartExpr() . g:table_mode_separator)
|
||||
function! tablemode#table#IsHeader(line) "{{{2
|
||||
let line = tablemode#utils#line(a:line)
|
||||
return tablemode#table#IsBorder(line+1) && !tablemode#table#IsRow(line-1) && !tablemode#table#IsRow(line-2)
|
||||
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))
|
||||
endfunction
|
||||
|
||||
@@ -172,8 +177,8 @@ function! tablemode#table#Realign(line) "{{{2
|
||||
|
||||
let lines = []
|
||||
let [lnum, blines] = [line, []]
|
||||
while tablemode#table#IsRow(lnum) || tablemode#table#IsHeader(lnum)
|
||||
if tablemode#table#IsHeader(lnum)
|
||||
while tablemode#table#IsRow(lnum) || tablemode#table#IsBorder(lnum)
|
||||
if tablemode#table#IsBorder(lnum)
|
||||
call insert(blines, lnum)
|
||||
let lnum -= 1
|
||||
continue
|
||||
@@ -183,8 +188,8 @@ function! tablemode#table#Realign(line) "{{{2
|
||||
endwhile
|
||||
|
||||
let lnum = line + 1
|
||||
while tablemode#table#IsRow(lnum) || tablemode#table#IsHeader(lnum)
|
||||
if tablemode#table#IsHeader(lnum)
|
||||
while tablemode#table#IsRow(lnum) || tablemode#table#IsBorder(lnum)
|
||||
if tablemode#table#IsBorder(lnum)
|
||||
call add(blines, lnum)
|
||||
let lnum += 1
|
||||
continue
|
||||
@@ -200,6 +205,6 @@ function! tablemode#table#Realign(line) "{{{2
|
||||
endfor
|
||||
|
||||
for bline in blines
|
||||
call tablemode#table#AddHeaderBorder(bline)
|
||||
call tablemode#table#AddBorder(bline)
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
Reference in New Issue
Block a user