mirror of
https://github.com/dhruvasagar/vim-table-mode.git
synced 2025-11-13 05:23:46 -05:00
Refactoring alignment
This commit is contained in:
@@ -118,48 +118,46 @@ function! tablemode#align#scope() "{{{2
|
||||
endfunction
|
||||
|
||||
function! tablemode#align#Align(lines) "{{{2
|
||||
let lines = map(a:lines, 's:Split(v:val, g:table_mode_separator)')
|
||||
let lines = map(a:lines, 'map(v:val, "v:key =~# \"text\" ? s:Split(v:val, g:table_mode_separator) : v:val")')
|
||||
|
||||
for line in lines
|
||||
if len(line) <= 1 | continue | endif
|
||||
let stext = line.text
|
||||
if len(stext) <= 1 | continue | endif
|
||||
|
||||
if line[0] !~ tablemode#table#StartExpr()
|
||||
let line[0] = s:StripTrailingSpaces(line[0])
|
||||
if stext[0] !~ tablemode#table#StartExpr()
|
||||
let stext[0] = s:StripTrailingSpaces(stext[0])
|
||||
endif
|
||||
if len(line) >= 2
|
||||
for i in range(1, len(line)-1)
|
||||
let line[i] = tablemode#utils#strip(line[i])
|
||||
if len(stext) >= 2
|
||||
for i in range(1, len(stext)-1)
|
||||
let stext[i] = tablemode#utils#strip(stext[i])
|
||||
endfor
|
||||
endif
|
||||
endfor
|
||||
|
||||
let maxes = []
|
||||
for line in lines
|
||||
if len(line) <= 1 | continue | endif
|
||||
for i in range(len(line))
|
||||
let stext = line.text
|
||||
if len(stext) <= 1 | continue | endif
|
||||
for i in range(len(stext))
|
||||
if i == len(maxes)
|
||||
let maxes += [ s:Strlen(line[i]) ]
|
||||
let maxes += [ s:Strlen(stext[i]) ]
|
||||
else
|
||||
let maxes[i] = max([ maxes[i], s:Strlen(line[i]) ])
|
||||
let maxes[i] = max([ maxes[i], s:Strlen(stext[i]) ])
|
||||
endif
|
||||
endfor
|
||||
endfor
|
||||
|
||||
for idx in range(len(lines))
|
||||
let line = lines[idx]
|
||||
let tlnum = lines[idx].lnum
|
||||
let tline = lines[idx].text
|
||||
|
||||
if len(line) <= 1 | continue | endif
|
||||
for i in range(len(line))
|
||||
if line[i] !~# '[^0-9\.]'
|
||||
let field = s:Padding(line[i], maxes[i], 'r')
|
||||
else
|
||||
let field = s:Padding(line[i], maxes[i], 'l')
|
||||
endif
|
||||
|
||||
let line[i] = field . (i == 0 || i == len(line) ? '' : ' ')
|
||||
if len(tline) <= 1 | continue | endif
|
||||
for i in range(len(tline))
|
||||
let field = s:Padding(tline[i], maxes[i], tablemode#table#alignment(tline[i]))
|
||||
let tline[i] = field . (i == 0 || i == len(tline) ? '' : ' ')
|
||||
endfor
|
||||
|
||||
let lines[idx] = s:StripTrailingSpaces(join(line, ''))
|
||||
let lines[idx].text = s:StripTrailingSpaces(join(tline, ''))
|
||||
endfor
|
||||
|
||||
return lines
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
function! s:HeaderBorderExpr() "{{{2
|
||||
return tablemode#table#StartExpr() .
|
||||
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
|
||||
\ '[' . g:table_mode_fillchar . g:table_mode_corner . ']*' .
|
||||
\ '[' . g:table_mode_fillchar . g:table_mode_corner . g:table_mode_align_char . ']*' .
|
||||
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
|
||||
\ tablemode#table#EndExpr()
|
||||
endfunction
|
||||
@@ -147,44 +147,47 @@ function! tablemode#table#AddHeaderBorder(line) "{{{2
|
||||
call setline(a:line, s:GenerateHeaderBorder(a:line))
|
||||
endfunction
|
||||
|
||||
function! tablemode#table#alignment(line) "{{{2
|
||||
if a:line !~# '[^0-9\.]'
|
||||
return 'r'
|
||||
else
|
||||
return 'l'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! tablemode#table#Realign(line) "{{{2
|
||||
let line = tablemode#utils#line(a:line)
|
||||
|
||||
let [lnums, lines] = [[], []]
|
||||
let [tline, blines] = [line, []]
|
||||
while tablemode#table#IsATableRow(tline) || tablemode#table#IsATableHeader(tline)
|
||||
if tablemode#table#IsATableHeader(tline)
|
||||
call insert(blines, tline)
|
||||
let tline -= 1
|
||||
let lines = []
|
||||
let [lnum, blines] = [line, []]
|
||||
while tablemode#table#IsATableRow(lnum) || tablemode#table#IsATableHeader(lnum)
|
||||
if tablemode#table#IsATableHeader(lnum)
|
||||
call insert(blines, lnum)
|
||||
let lnum -= 1
|
||||
continue
|
||||
endif
|
||||
call insert(lnums, tline)
|
||||
call insert(lines, getline(tline))
|
||||
let tline -= 1
|
||||
call insert(lines, {'lnum': lnum, 'text': getline(lnum)})
|
||||
let lnum -= 1
|
||||
endwhile
|
||||
|
||||
let tline = line + 1
|
||||
|
||||
while tablemode#table#IsATableRow(tline) || tablemode#table#IsATableHeader(tline)
|
||||
if tablemode#table#IsATableHeader(tline)
|
||||
call insert(blines, tline)
|
||||
let tline += 1
|
||||
let lnum = line + 1
|
||||
while tablemode#table#IsATableRow(lnum) || tablemode#table#IsATableHeader(lnum)
|
||||
if tablemode#table#IsATableHeader(lnum)
|
||||
call insert(blines, lnum)
|
||||
let lnum += 1
|
||||
continue
|
||||
endif
|
||||
call add(lnums, tline)
|
||||
call add(lines, getline(tline))
|
||||
let tline += 1
|
||||
call insert(lines, {'lnum': lnum, 'text': getline(lnum)})
|
||||
let lnum += 1
|
||||
endwhile
|
||||
|
||||
let lines = tablemode#align#Align(lines)
|
||||
|
||||
for lnum in lnums
|
||||
let index = index(lnums, lnum)
|
||||
call setline(lnum, lines[index])
|
||||
for aline in lines
|
||||
call setline(aline.lnum, aline.text)
|
||||
endfor
|
||||
|
||||
for bline in blines
|
||||
call tablemode#table#AddHeaderBorder(bline)
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
|
||||
Reference in New Issue
Block a user