~sircmpwn/scdoc

56b882d63f1409616a701eae40976aba7ef39583 — Jakub Kądziołka 3 years ago 3f4de3d
Support empty table cells
2 files changed, 20 insertions(+), 15 deletions(-)

M scdoc.5.scd
M src/main.c
M scdoc.5.scd => scdoc.5.scd +2 -2
@@ 133,7 133,7 @@ To conclude your table, add an empty line after the last row.
```
[[ *Foo*
:- _Bar_
:- _Baz_
:-
|  *Row 1*
:  Hello
:] world!


@@ 144,7 144,7 @@ To conclude your table, add an empty line after the last row.

[[ *Foo*
:- _Bar_
:- _Baz_
:-
|  *Row 1*
:  Hello
:] world!

M src/main.c => src/main.c +18 -13
@@ 487,21 487,26 @@ static void parse_table(struct parser *p, uint32_t style) {
			parser_fatal(p, "Expected one of '[', '-', ']', or ' '");
			break;
		}
		if ((ch = parser_getch(p)) != ' ') {
			parser_fatal(p, "Expected ' '");
			break;
		}
		// Read out remainder of the text
		curcell->contents = str_create();
		while ((ch = parser_getch(p)) != UTF8_INVALID) {
			switch (ch) {
			case '\n':
				goto commit_cell;
			default:;
				int ret = str_append_ch(curcell->contents, ch);
				assert(ret != -1);
				break;
		switch (ch = parser_getch(p)) {
		case ' ':
			// Read out remainder of the text
			while ((ch = parser_getch(p)) != UTF8_INVALID) {
				switch (ch) {
				case '\n':
					goto commit_cell;
				default:;
					int ret = str_append_ch(curcell->contents, ch);
					assert(ret != -1);
					break;
				}
			}
			break;
		case '\n':
			goto commit_cell;
		default:
			parser_fatal(p, "Expected ' ' or a newline");
			break;
		}
commit_cell:
		if (strstr(curcell->contents->str, "T{")