diff options
author | Vincent Driessen <vincent@datafox.nl> | 2010-08-19 12:21:08 +0200 |
---|---|---|
committer | Vincent Driessen <vincent@datafox.nl> | 2010-08-19 12:21:08 +0200 |
commit | f84c47622786b654f2dfbe2e6d79b7f269a91a06 (patch) | |
tree | b1a767c97440e291487cffd0c0bf17a0410be212 /ftplugin | |
parent | 81c52547b08e24b2be35ddca47167527e958fa6e (diff) | |
download | vim-rst-tables-f84c47622786b654f2dfbe2e6d79b7f269a91a06.tar.gz vim-rst-tables-f84c47622786b654f2dfbe2e6d79b7f269a91a06.tar.bz2 vim-rst-tables-f84c47622786b654f2dfbe2e6d79b7f269a91a06.zip |
Add line partitioner.
Is able to parse tables of the form:
+=====+=====================+
| Foo | Bar |
+=====+=====================+
| x | This is a long line |
| | that is spread out |
| | over multiple lines |
+-----+---------------------+
Into:
[['Foo', 'Bar'], ['x', 'This is a long line\nthat is spread out\nover multiple lines']]
The draw_table function needs to be written still, though.
Diffstat (limited to 'ftplugin')
-rw-r--r-- | ftplugin/rst_tables.vim | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/ftplugin/rst_tables.vim b/ftplugin/rst_tables.vim index 72fe5d4..c793dac 100644 --- a/ftplugin/rst_tables.vim +++ b/ftplugin/rst_tables.vim @@ -63,6 +63,37 @@ def join_rows(rows, sep='\n'): return map(lambda lines: sep.join(lines), output) +def line_is_separator(line): + return re.match('^[\t +=-]+$', line) + +def has_line_seps(raw_lines): + for line in raw_lines: + if line_is_separator(line): + return True + return False + + +def partition_raw_lines(raw_lines): + """Partitions a list of raw input lines so that between each partition, a + table row separator can be placed. + + """ + if not has_line_seps(raw_lines): + return map(lambda x: [x], raw_lines) + + curr_part = [] + parts = [curr_part] + for line in raw_lines: + if line_is_separator(line): + curr_part = [] + parts.append(curr_part) + else: + curr_part.append(line) + + # remove any empty partitions (typically the first and last ones) + return filter(lambda x: x != [], parts) + + def unify_table(table): """Given a list of rows (i.e. a table), this function returns a new table in which all rows have an equal amount of columns. If all full column is @@ -106,9 +137,9 @@ def split_table_row(row_string): def parse_table(raw_lines): - select_data_lines = lambda line: not re.match('^[\t +=-]+$', line) - lines = filter(select_data_lines, raw_lines) - lines = map(split_table_row, lines) + row_partition = partition_raw_lines(raw_lines) + lines = map(lambda row_string: join_rows(map(split_table_row, row_string)), + row_partition) return unify_table(lines) |