tables: add expand options

master
Drew DeVault 6 years ago
parent 5c782cda95
commit 4b29f37a66
  1. 15
      scdoc.5.scd
  2. 36
      src/main.c

@ -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 ## LITERAL TEXT
You may turn off scdoc formatting and output literal text with escape codes and You may turn off scdoc formatting and output literal text with escape codes and

@ -434,6 +434,9 @@ enum table_align {
ALIGN_LEFT, ALIGN_LEFT,
ALIGN_CENTER, ALIGN_CENTER,
ALIGN_RIGHT, ALIGN_RIGHT,
ALIGN_LEFT_EXPAND,
ALIGN_CENTER_EXPAND,
ALIGN_RIGHT_EXPAND,
}; };
struct table_row { struct table_row {
@ -508,6 +511,15 @@ static void parse_table(struct parser *p, uint32_t style) {
case ']': case ']':
curcell->align = ALIGN_RIGHT; curcell->align = ALIGN_RIGHT;
break; break;
case '<':
curcell->align = ALIGN_LEFT_EXPAND;
break;
case '=':
curcell->align = ALIGN_CENTER_EXPAND;
break;
case '>':
curcell->align = ALIGN_RIGHT_EXPAND;
break;
case ' ': case ' ':
if (prevrow) { if (prevrow) {
struct table_cell *pcell = prevrow->cell; struct table_cell *pcell = prevrow->cell;
@ -576,8 +588,28 @@ commit_table:
while (currow) { while (currow) {
curcell = currow->cell; curcell = currow->cell;
while (curcell) { while (curcell) {
fprintf(p->output, "%c%s", "lcr"[curcell->align], char *align = "";
curcell->next ? " " : ""); 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; curcell = curcell->next;
} }
fprintf(p->output, "%s\n", currow->next ? "" : "."); fprintf(p->output, "%s\n", currow->next ? "" : ".");

Loading…
Cancel
Save