~sircmpwn/scdoc

4b29f37a662fa30d360bfccc843a5f8c1387f3c1 — Drew DeVault 4 months ago 5c782cd
tables: add expand options
2 files changed, 49 insertions(+), 2 deletions(-)

M scdoc.5.scd
M src/main.c
M scdoc.5.scd => scdoc.5.scd +15 -0
@@ 155,6 155,21 @@ To conclude your table, add an empty line after the last row.
:  世界
   !

You may also cause columns to expand to fill the available space with < (left
align), = (center align), and > (right align), like so:

```
[[ *Normal column*
:< Expanded column
|  *Foo*
:  Bar
```

[[ *Normal column*
:< Expanded column
|  *Foo*
:  Bar

## LITERAL TEXT

You may turn off scdoc formatting and output literal text with escape codes and

M src/main.c => src/main.c +34 -2
@@ 434,6 434,9 @@ enum table_align {
	ALIGN_LEFT,
	ALIGN_CENTER,
	ALIGN_RIGHT,
	ALIGN_LEFT_EXPAND,
	ALIGN_CENTER_EXPAND,
	ALIGN_RIGHT_EXPAND,
};

struct table_row {


@@ 508,6 511,15 @@ static void parse_table(struct parser *p, uint32_t style) {
		case ']':
			curcell->align = ALIGN_RIGHT;
			break;
		case '<':
			curcell->align = ALIGN_LEFT_EXPAND;
			break;
		case '=':
			curcell->align = ALIGN_CENTER_EXPAND;
			break;
		case '>':
			curcell->align = ALIGN_RIGHT_EXPAND;
			break;
		case ' ':
			if (prevrow) {
				struct table_cell *pcell = prevrow->cell;


@@ 576,8 588,28 @@ commit_table:
	while (currow) {
		curcell = currow->cell;
		while (curcell) {
			fprintf(p->output, "%c%s", "lcr"[curcell->align],
					curcell->next ? " " : "");
			char *align = "";
			switch (curcell->align) {
			case ALIGN_LEFT:
				align = "l";
				break;
			case ALIGN_CENTER:
				align = "c";
				break;
			case ALIGN_RIGHT:
				align = "r";
				break;
			case ALIGN_LEFT_EXPAND:
				align = "lx";
				break;
			case ALIGN_CENTER_EXPAND:
				align = "cx";
				break;
			case ALIGN_RIGHT_EXPAND:
				align = "rx";
				break;
			}
			fprintf(p->output, "%s%s", align, curcell->next ? " " : "");
			curcell = curcell->next;
		}
		fprintf(p->output, "%s\n", currow->next ? "" : ".");