From 74d1492f2bd07cd629bcba18ce4c798d7e6cb483 Mon Sep 17 00:00:00 2001 From: Dhruva Sagar Date: Tue, 14 Apr 2015 15:56:09 -0700 Subject: [PATCH] Add support for center alignment. Fix #57 We now have support for center alignment, simply add a header border with the `g:table_mode_align_char` as both the first and the last character so it would look something like `+:.....:+` to center align the column values. --- autoload/tablemode/align.vim | 11 ++++++++--- autoload/tablemode/table.vim | 5 ++++- t/fixtures/table/sample_header_realign_after.txt | 8 ++++---- t/fixtures/table/sample_header_realign_before.txt | 8 ++++---- .../table/sample_header_realign_unicode_after.txt | 10 +++++----- .../table/sample_header_realign_unicode_before.txt | 2 +- 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/autoload/tablemode/align.vim b/autoload/tablemode/align.vim index fa267b3..9e6330c 100644 --- a/autoload/tablemode/align.vim +++ b/autoload/tablemode/align.vim @@ -13,7 +13,7 @@ function! s:Padding(string, length, where) "{{{3 elseif a:where =~# 'r' return repeat(" ", gap_length) . a:string elseif a:where =~# 'c' - let right = spaces / 2 + let right = gap_length / 2 let left = right + (right * 2 != gap_length) return repeat(" ", left) . a:string . repeat(" ", right) endif @@ -64,14 +64,19 @@ function! tablemode#align#Split(string, delim) endfunction function! tablemode#align#alignments(lnum, ncols) "{{{2 + let achr = g:table_mode_align_char let alignments = [] 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 call add(alignments, 'l') - if hcols[idx] =~# g:table_mode_align_char . '$' | let alignments[idx] = 'r' | endif - if hcols[idx] !~# '[^0-9\.]' | let alignments[idx] = 'r' | endif + if hcols[idx] =~# achr . '[^'.achr.']\+' . achr + let alignments[idx] = 'c' + elseif hcols[idx] =~# achr . '$' + let alignments[idx] = 'r' + endif + " if hcols[idx] !~# '[^0-9\.]' | let alignments[idx] = 'r' | endif endfor end return alignments diff --git a/autoload/tablemode/table.vim b/autoload/tablemode/table.vim index 27e884f..91cdc2b 100644 --- a/autoload/tablemode/table.vim +++ b/autoload/tablemode/table.vim @@ -45,7 +45,10 @@ function! s:GenerateHeaderBorder(line) "{{{2 for idx in range(len(hcols)) if hcols[idx] =~# g:table_mode_align_char - if hcols[idx] =~# g:table_mode_align_char . '$' + " center align + if hcols[idx] =~# g:table_mode_align_char . '[^'.g:table_mode_align_char.']\+' . g:table_mode_align_char + let gcols[idx] = g:table_mode_align_char . gcols[idx][1:-2] . g:table_mode_align_char + elseif hcols[idx] =~# g:table_mode_align_char . '$' let gcols[idx] = gcols[idx][:-2] . g:table_mode_align_char else let gcols[idx] = g:table_mode_align_char . gcols[idx][1:] diff --git a/t/fixtures/table/sample_header_realign_after.txt b/t/fixtures/table/sample_header_realign_after.txt index ec77850..e4362a1 100644 --- a/t/fixtures/table/sample_header_realign_after.txt +++ b/t/fixtures/table/sample_header_realign_after.txt @@ -1,4 +1,4 @@ -| Title | Message | -|------:+--------:| -| t1 | msg1 | -| t2 | msg2 | +| S. No | Title | Message | +|-------+:------+:-------:| +| 1 | t1 | msg1 | +| 2 | t2 | msg2 | diff --git a/t/fixtures/table/sample_header_realign_before.txt b/t/fixtures/table/sample_header_realign_before.txt index 045fc67..1f65bfd 100644 --- a/t/fixtures/table/sample_header_realign_before.txt +++ b/t/fixtures/table/sample_header_realign_before.txt @@ -1,4 +1,4 @@ -| Title | Message | -|------:+--------:| -| t1 | msg1 | -| t2 | msg2 | +|S. No|Title|Message| +|-----+:----+:-----:| +|1|t1|msg1| +|2|t2|msg2| diff --git a/t/fixtures/table/sample_header_realign_unicode_after.txt b/t/fixtures/table/sample_header_realign_unicode_after.txt index 285067b..4c70b01 100644 --- a/t/fixtures/table/sample_header_realign_unicode_after.txt +++ b/t/fixtures/table/sample_header_realign_unicode_after.txt @@ -1,8 +1,8 @@ |--------------+------------------+------------| -| 测试测试 | 测试长度 | 长测试 | -|--------------+------------------+-----------:| -| abc | 测试长度 | 长测试 | +| 测试测试 | 测试长度 | 长测试 | +|--------------+:----------------:+-----------:| +| abc | 测试长度 | 长测试 | | 长 | 测试测试测试测试 | 测试测试 | -| 测试测试 | 测试 | 测试测测试 | -| 测试测试测试 | 测试测试 | 测试 | +| 测试测试 | 测试 | 测试测测试 | +| 测试测试测试 | 测试测试 | 测试 | |--------------+------------------+------------| diff --git a/t/fixtures/table/sample_header_realign_unicode_before.txt b/t/fixtures/table/sample_header_realign_unicode_before.txt index 70e4e49..67bf1db 100644 --- a/t/fixtures/table/sample_header_realign_unicode_before.txt +++ b/t/fixtures/table/sample_header_realign_unicode_before.txt @@ -1,6 +1,6 @@ |--------+--------+------| |测试测试|测试长度|长测试| -|--------+--------+-----:| +|--------+:------:+-----:| |abc|测试长度|长测试| |长|测试测试测试测试|测试测试| |测试测试|测试|测试测测试|