From 4422e1fbb74a85fd7167d9506c837cdfd09311ee Mon Sep 17 00:00:00 2001 From: Vincent Driessen Date: Fri, 20 Aug 2010 10:27:41 +0200 Subject: Implemented the "reflow" command. For example, if you have the following table in your source file: Type Message Foo I like bananas very much. Even so much that I adore them. Position your cursor in it and call ReformatTable(). This makes the following: +======+===========================================================+ | Type | Message | +======+===========================================================+ | Foo | I like bananas very much. Even so much that I adore them. | +------+-----------------------------------------------------------+ But if you don't like these kinds of long wrappings, you can now simply remove (or add, for that matter) some of the '='-signs from the top row, like this: +======+================================+ | Type | Message | +======+===========================================================+ | Foo | I like bananas very much. Even so much that I adore them. | +------+-----------------------------------------------------------+ And then, call ReflowTable(): +======+================================+ | Type | Message | +======+================================+ | Foo | I like bananas very much. Even | | | so much that I adore them. | +------+--------------------------------+ This fixed issue #1. --- tests/fixtures/reflow.txt | 14 +++++++++++ tests/test_rst_tables.py | 59 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 tests/fixtures/reflow.txt (limited to 'tests') diff --git a/tests/fixtures/reflow.txt b/tests/fixtures/reflow.txt new file mode 100644 index 0000000..f1dbc1e --- /dev/null +++ b/tests/fixtures/reflow.txt @@ -0,0 +1,14 @@ +This is paragraph text *before* the table. + ++==========+==========================+ +| Column 1 | Column 2 | ++==========+================================================================================================+ +| Foo | Put two (or more) spaces as a field separator. | ++----------+------------------------------------------------------------------------------------------------+ +| Bar | Even very very long lines like these are fine, as long as you do not put in line endings here. | ++----------+------------------------------------------------------------------------------------------------+ +| Qux | This is the last line. | ++----------+------------------------------------------------------------------------------------------------+ + +This is paragraph text *after* the table, with +a line ending. diff --git a/tests/test_rst_tables.py b/tests/test_rst_tables.py index 7d72e25..a86e401 100644 --- a/tests/test_rst_tables.py +++ b/tests/test_rst_tables.py @@ -21,9 +21,10 @@ import unittest # Load test subjects from rst_tables import get_table_bounds, reformat_table, parse_table, \ - draw_table, table_line, get_column_widths, \ - pad_fields, unify_table, join_rows, \ - partition_raw_lines, split_row_into_lines + reflow_table, draw_table, table_line, get_column_widths, \ + get_column_widths_from_border_spec, pad_fields, unify_table, \ + join_rows, partition_raw_lines, split_row_into_lines, \ + reflow_row_contents class TestRSTTableFormatter(unittest.TestCase): @@ -210,6 +211,13 @@ class TestRSTTableFormatter(unittest.TestCase): get_column_widths([['Foo\nBar\nQux', 'This\nis\nreally\nneat!']])) + def testGetColumnWidthsFromBorderSpec(self): + input = ['+====+=====+==+=======+', + '| xx | xxx | | xxxxx |', + '+====+=====+==+=======+'] + self.assertEquals([2, 3, 0, 5], + get_column_widths_from_border_spec(input)) + def testPadFields(self): table = [['Name', 'Type', 'Description'], ['Lollypop', 'Candy', 'Yummy'], @@ -222,6 +230,23 @@ class TestRSTTableFormatter(unittest.TestCase): for input, expect in zip(table, expected_padding): self.assertEquals(expect, pad_fields(input, widths)) + def testReflowRowContentsWithEnoughWidth(self): + input = ['Foo\nbar', 'This line\nis spread\nout over\nfour lines.'] + expect = ['Foo bar', 'This line is spread out over four lines.'] + self.assertEquals(expect, reflow_row_contents(input, [99,99])) + + def testReflowRowContentsWithWrapping(self): + input = ['Foo\nbar', 'This line\nis spread\nout over\nfour lines.'] + expect = ['Foo bar', 'This line is spread\nout over four lines.'] + self.assertEquals(expect, reflow_row_contents(input, [10,20])) + + input = ['Foo\nbar', 'This line\nis spread\nout over\nfour lines.'] + expect = ['Foo bar', 'This\nline\nis\nspread\nout\nover\nfour\nlines.'] + self.assertEquals(expect, reflow_row_contents(input, [10,6])) + + def testReflowRowContentsWithoutRoom(self): + #self.assertEquals(expect, reflow_row_contents(input)) + pass def testDrawTable(self): self.assertEquals([], draw_table([])) @@ -236,6 +261,7 @@ class TestRSTTableFormatter(unittest.TestCase): '+-----+----+'], draw_table([['Foo', 'Mu'], ['x', 'y']])) + def testCreateTable(self): self.load_fixture_in_vim('default') expect = """\ @@ -278,3 +304,30 @@ a line ending. +----------------+---------------------------------------------------------------+ """.rstrip().split('\n') self.assertEquals(expect, draw_table(parse_table(raw_lines))) + + def testReflowTable(self): + self.load_fixture_in_vim('reflow') + expect = """\ +This is paragraph text *before* the table. + ++==========+==========================+ +| Column 1 | Column 2 | ++==========+==========================+ +| Foo | Put two (or more) spaces | +| | as a field separator. | ++----------+--------------------------+ +| Bar | Even very very long | +| | lines like these are | +| | fine, as long as you do | +| | not put in line endings | +| | here. | ++----------+--------------------------+ +| Qux | This is the last line. | ++----------+--------------------------+ + +This is paragraph text *after* the table, with +a line ending. +""".split('\n') + reflow_table() + self.assertEquals(expect, vim.current.buffer) + -- cgit v1.2.3