Compare commits

...

4 Commits

Author SHA1 Message Date
Dhruva Sagar
272bef4ce0 Releasing v2.3.0
- Refactored realignment logic.
- Generating borders by hand rather than relying on
  tabular formatting since that puts restrictions on the borders
  (padding). With the new scheme, I am able to generate good looking
  tables with neat borders like they should be, without padding.
- Updated doc/table-mode.txt
2013-05-04 03:23:20 +05:30
Dhruva Sagar
7c4039e5e1 Updated Table Mode Public API
- Added tablemode#RowCount(line). Returns the total number of rows in a
  table given a line (row).
- Added tablemode#ColumnCount(line). Returns the total number of columns
  in a line (row).
- Added tablemode#RowNr(line). Returns the row number on given line.
- Added tablemode#ColumnNr(line). Returns the column on given line.
2013-05-03 16:22:20 +05:30
Dhruva Sagar
28b13a32ab Fixed #6
- Realign now updates table borders as well.
2013-05-01 12:08:39 +05:30
Dhruva Sagar
599a39c28d Updated documentation 2013-05-01 02:30:24 +05:30
5 changed files with 168 additions and 76 deletions

View File

@@ -1,4 +1,8 @@
# Change Log
## Version 2.2.2
* Added mapping for realigning table columns.
* Added table motions to move around in the table.
## Version 2.2.1
* Added feature to allow Table-Mode to work within comments. Uses
'commentstring' option of vim to identify comments, so it should work for
@@ -17,7 +21,7 @@
* Bug Fixes #2, #3 & #4
## Version 2.1.1 :
* Added option g:table_mode_align to allow setting Tabular format option for
* Added option `g:table_mode_align` to allow setting Tabular format option for
more control on how Tabular aligns text.
## Version 2.1 :

View File

@@ -58,6 +58,10 @@ sure Tabular is installed and loaded into your runtime to ensure this works.
`:line1,line2Tableize`, but this is not that intuitive. You can also use
the mapping `<Leader>T` with a `[count]` to apply it to the next `[count]`
lines in usual vim style.
- Move between cells :
Now you can move between cells using table mode motions. Check `:h
table-mode-motion-prefix` for more details.
### Demo

View File

@@ -4,7 +4,7 @@
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: http://github.com/dhruvasagar/vim-table-mode
" Version: 2.2.2
" Version: 2.3.0
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope and
" uses a small amount of code from it.
@@ -56,7 +56,6 @@ call s:SetGlobalOptDefault('table_mode_delimiter', ',')
call s:SetGlobalOptDefault('table_mode_tableize_map', '<Leader>tt')
call s:SetGlobalOptDefault('table_mode_tableize_op_map', '<Leader>T')
call s:SetGlobalOptDefault('table_mode_align', 'l1')
call s:SetGlobalOptDefault('table_mode_no_border_padding', '0')
call s:SetGlobalOptDefault('table_mode_realign_map', '<Leader>tr')
call s:SetGlobalOptDefault('table_mode_motion_prefix', '<Leader>t')
"}}}1
@@ -91,7 +90,7 @@ execute "xnoremap <silent> " . g:table_mode_tableize_map . " :Tableize<CR>"
execute "nnoremap <silent> " . g:table_mode_tableize_map . " :Tableize<CR>"
execute "xnoremap <silent> " . g:table_mode_tableize_op_map . " :<C-U>call tablemode#TableizeByDelimiter()<CR>"
execute "nnoremap <silent> " . g:table_mode_realign_map . " :<C-U>call tablemode#TableRealign()<CR>"
execute "nnoremap <silent> " . g:table_mode_realign_map . " :<C-U>call tablemode#TableRealign('.')<CR>"
execute "nnoremap <silent> " . g:table_mode_motion_prefix . " :<C-U>call <SID>TableMotion()<CR>"
"}}}1

View File

@@ -4,7 +4,7 @@
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: http://github.com/dhruvasagar/vim-table-mode
" Version: 2.2.2
" Version: 2.3.0
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope and
" uses a small amount of code from it.
@@ -35,11 +35,6 @@ function! s:Strlen(text)
endfunction
" }}}2
function! s:CountSeparator(line, separator) "{{{2
return s:Strlen(substitute(getline(a:line), '[^' . a:separator . ']', '', 'g'))
endfunction
" }}}2
function! s:GetCommentStart() "{{{2
let cstring = &commentstring
if s:Strlen(cstring) > 0
@@ -98,57 +93,53 @@ function! s:SetActive(bool) "{{{2
endfunction
" }}}2
function! s:UpdateLineBorder(line) "{{{2
let cline = a:line
let hf = s:StartExpr() . g:table_mode_corner . '[' . g:table_mode_corner . ' ' .
\ g:table_mode_fillchar . ']*' . g:table_mode_corner . '\?\s*$'
let curr_line_count = s:CountSeparator(cline, g:table_mode_separator)
if getline(cline-1) =~# hf
let prev_line_count = s:CountSeparator(cline-1, g:table_mode_corner)
if curr_line_count > prev_line_count
silent! execute 'normal! kA' . repeat(g:table_mode_corner, curr_line_count - prev_line_count) . "\<Esc>j"
endif
function! s:GenerateBorder(line) "{{{2
let line = 0
if type(a:line) == type('')
let line = line(a:line)
else
let cstartexpr = s:StartCommentExpr()
if s:Strlen(cstartexpr) > 0 && getline(cline) =~# cstartexpr
let indent = matchstr(getline(cline), s:StartCommentExpr())
call append(cline-1, indent . repeat(g:table_mode_corner, curr_line_count))
else
call append(cline-1, repeat(g:table_mode_corner, curr_line_count))
endif
let cline = a:line + 1 " because of the append, the current line moved down
let line = a:line
endif
if getline(cline+1) =~# hf
let next_line_count = s:CountSeparator(cline+1, g:table_mode_corner)
if curr_line_count > next_line_count
silent! execute 'normal! jA' . repeat(g:table_mode_corner, curr_line_count - next_line_count) . "\<Esc>k"
end
let border = substitute(getline(line)[stridx(getline(line), g:table_mode_separator):-1], g:table_mode_separator, g:table_mode_corner, 'g')
let border = substitute(border, '[^' . g:table_mode_corner . ']', g:table_mode_fillchar, 'g')
let cstartexpr = s:StartCommentExpr()
if s:Strlen(cstartexpr) > 0 && getline(line) =~# cstartexpr
let indent = matchstr(getline(line), s:StartCommentExpr())
return indent . border
elseif getline(line) =~# s:StartExpr()
let indent = matchstr(getline(line), s:StartExpr())
return indent . border
else
let cstartexpr = s:StartCommentExpr()
if s:Strlen(cstartexpr) > 0 && getline(cline) =~# cstartexpr
let indent = matchstr(getline(cline), s:StartCommentExpr())
call append(cline, indent . repeat(g:table_mode_corner, curr_line_count))
else
call append(cline, repeat(g:table_mode_corner, curr_line_count))
endif
return border
endif
endfunction
" }}}2
function! s:FillTableBorder() "{{{2
let [ current_col, current_line ] = [ col('.'), line('.') ]
if g:table_mode_no_border_padding
silent! execute '%s/' . g:table_mode_corner . '\zs\([' .
\ g:table_mode_fillchar . ' ]*\)\ze' . g:table_mode_corner .
\ '/\=repeat("' . g:table_mode_fillchar . '", s:Strlen(submatch(0)))/g'
function! s:UpdateLineBorder(line) "{{{2
let cline = a:line
let hf = s:StartExpr() . g:table_mode_corner . '[' . g:table_mode_corner .
\ g:table_mode_fillchar . ']*' . g:table_mode_corner . '\?\s*$'
let border = s:GenerateBorder(cline)
let [prev_line, next_line] = [getline(cline-1), getline(cline+1)]
if next_line =~# hf
if next_line !=# border
call setline(cline+1, border)
endif
else
silent! execute '%s/' . g:table_mode_corner . ' \zs\([' .
\ g:table_mode_fillchar . ' ]*\)\ze ' . g:table_mode_corner .
\ '/\=repeat("' . g:table_mode_fillchar . '", s:Strlen(submatch(0)))/g'
call append(cline, border)
endif
if prev_line =~# hf
if prev_line !=# border
call setline(cline-1, border)
endif
else
call append(cline-1, border)
endif
call cursor(current_line, current_col)
endfunction
" }}}2
@@ -171,12 +162,6 @@ function! s:Tableizeline(line, ...) "{{{2
if a:0 && type(a:1) == type('') && !empty(a:1) | let delim = a:1[1:-1] | endif
call s:ConvertDelimiterToSeparator(a:line, delim)
if g:table_mode_border | call s:UpdateLineBorder(a:line) | endif
call tablemode#TableRealign()
endfunction
" }}}2
function! s:ColumnCount(line) "{{{2
return s:Strlen(substitute(getline(a:line), '[^' . g:table_mode_separator . ']', '', 'g'))-1
endfunction
" }}}2
@@ -186,7 +171,7 @@ endfunction
" }}}2
function! s:IsLastCell() "{{{2
return tablemode#TableColumnNr('.') ==# s:ColumnCount('.')
return tablemode#TableColumnNr('.') ==# tablemode#ColumnCount('.')
endfunction
" }}}2
@@ -198,10 +183,7 @@ function! tablemode#TableizeInsertMode() "{{{2
if s:IsTableModeActive() && getline('.') =~# (s:StartExpr() . g:table_mode_separator)
let column = s:Strlen(substitute(getline('.')[0:col('.')], '[^' . g:table_mode_separator . ']', '', 'g'))
let position = s:Strlen(matchstr(getline('.')[0:col('.')], '.*' . g:table_mode_separator . '\s*\zs.*'))
if g:table_mode_border | call s:UpdateLineBorder(line('.')) | endif
if g:table_mode_no_border_padding && g:table_mode_align !=# 'c0' | let g:table_mode_align = 'c0' | endif
call tablemode#TableRealign()
if g:table_mode_border | call s:FillTableBorder() | endif
call tablemode#TableRealign('.')
normal! 0
call search(repeat('[^' . g:table_mode_separator . ']*' . g:table_mode_separator, column) . '\s\{-\}' . repeat('.', position), 'ce', line('.'))
endif
@@ -241,7 +223,8 @@ function! tablemode#TableizeRange(...) range "{{{2
undojoin
let lnum = lnum + shift
endwhile
if g:table_mode_border | call s:FillTableBorder() | endif
if g:table_mode_border | call tablemode#TableRealign(lnum - shift) | endif
endfunction
" }}}2
@@ -255,8 +238,47 @@ function! tablemode#TableizeByDelimiter() "{{{2
endfunction
" }}}2
function! tablemode#TableRealign() "{{{2
execute 'Tabularize/[' . g:table_mode_separator . g:table_mode_corner . ']/' . g:table_mode_align
function! tablemode#TableRealign(line) "{{{2
let line = 0
if type(a:line) == type('')
let line = line(a:line)
else
let line = a:line
endif
let rowCount = 1
if g:table_mode_border | let rowCount = 2 | endif
let [lnums, lines] = [[], []]
let tline = line
while tline > 0
if tablemode#IsATableRow(tline)
call insert(lnums, tline)
call insert(lines, getline(tline))
else
break
endif
let tline = tline - rowCount
endwhile
let tline = line + rowCount
while tline <= line('$')
if tablemode#IsATableRow(tline)
call add(lnums, tline)
call add(lines, getline(tline))
else
break
endif
let tline = tline + rowCount
endwhile
call tabular#TabularizeStrings(lines, g:table_mode_separator)
for lnum in lnums
let index = index(lnums, lnum)
call setline(lnum, lines[index])
call s:UpdateLineBorder(lnum)
endfor
endfunction
" }}}2
@@ -265,14 +287,52 @@ function! tablemode#IsATableRow(line) "{{{2
endfunction
" }}}2
function! tablemode#TableRowNr(pos) "{{{2
function! tablemode#RowCount(line) "{{{2
let line = 0
if type(a:pos) == type('')
let line = line(a:pos)
elseif type(a:pos) == type(1)
let line = a:pos
if type(a:line) == type('')
let line = line(a:line)
else
let line = a:line
endif
let rowCount = 1
if g:table_mode_border | let rowCount = 2 | endif
let [tline, totalRowCount] = [line, 0]
while tline > 0
if tablemode#IsATableRow(tline)
let totalRowCount = totalRowCount + 1
else
break
endif
let tline = tline - rowCount
endwhile
let tline = line + rowCount
while tline <= line('$')
if tablemode#IsATableRow(tline)
let totalRowCount = totalRowCount + 1
else
break
endif
let tline = tline + rowCount
endwhile
return totalRowCount
endfunction
" }}}2
function! tablemode#RowNr(line) "{{{2
let line = 0
if type(a:line) == type('')
let line = line(a:line)
else
let line = a:line
endif
let rowCount = 1
if g:table_mode_border | let rowCount = 2 | endif
let rowNr = 0
while line > 0
if tablemode#IsATableRow(line)
@@ -280,13 +340,26 @@ function! tablemode#TableRowNr(pos) "{{{2
else
break
endif
let line = line - 2
let line = line - rowCount
endwhile
return rowNr
endfunction
" }}}2
function! tablemode#TableColumnNr(pos) "{{{2
function! tablemode#ColumnCount(line) "{{{2
let line = 0
if type(a:line) == type('')
let line = line(a:line)
else
let line = a:line
endif
return s:Strlen(substitute(getline(line), '[^' . g:table_mode_separator . ']', '', 'g'))-1
endfunction
" }}}2
function! tablemode#ColumnNr(pos) "{{{2
let pos = []
if type(a:pos) == type('')
let pos = [line(a:pos), col(a:pos)]
@@ -295,6 +368,7 @@ function! tablemode#TableColumnNr(pos) "{{{2
else
return 0
endif
return s:Strlen(substitute(getline(pos[0])[0:pos[1]-2], '[^' . g:table_mode_separator . ']', '', 'g'))
endfunction
" }}}2
@@ -313,7 +387,7 @@ function! tablemode#TableMotion(direction) "{{{2
" If line starts with g:table_mode_separator
if getline('.')[col('.')-1] ==# g:table_mode_separator
execute 'normal! 2l'
normal! 2l
else
execute 'normal! f' . g:table_mode_separator . '2l'
endif

View File

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting. v2.2.2
*table-mode.txt* Table Mode for easy table formatting. v2.3.0
===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 2.2.2
VERSION 2.3.0
Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/>
@@ -44,6 +44,12 @@ The table mode is disabled by default and you can enter table mode using
|table-mode-toggle-map| or you can also enable it permanently using
|g:table-mode-always-active| if you wish.
Table Mode allows for creation of tables within comments, it looks at the
'commentstring' setting to identify whether the current line is commented.
Table Mode enables conversion of delimited text into tables. Again like table
creation, this is also applicable within comments.
===============================================================================
OPTIONS *table-mode-options*
@@ -154,7 +160,9 @@ g:table_mode_motion_prefix *table-mode-motion-prefix*
You can move to the next / previous row / column using the motion
commands. The motions 'hjkl' follow the prefix are in accordance to
standard vim character motions to make them easier to remember. They
may also be preceeded with a [count].
may also be preceeded with a [count]. The 'h', 'l' (left and right
motions) wrap around the table row and move to the previous rows last
column, next rows first column respectively if one exists.
===============================================================================
MAPPINGS *table-mode-mappings*
@@ -178,6 +186,9 @@ MAPPINGS *table-mode-mappings*
*table-mode-mappings-realign*
<Leader>tr Realigns table columns
*table-mode-mappings-motions*
<Leader>t[hjkl] Move to previous | below | above | right cell in the table.
===============================================================================
COMMANDS *table-mode-commands*