4b29f37a662fa30d360bfccc843a5f8c1387f3c1 — Drew DeVault 11 days 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 @@ :  世界
     !
  
+ 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 @@ ALIGN_LEFT,
  	ALIGN_CENTER,
  	ALIGN_RIGHT,
+ 	ALIGN_LEFT_EXPAND,
+ 	ALIGN_CENTER_EXPAND,
+ 	ALIGN_RIGHT_EXPAND,
  };
  
  struct table_row {


@@ 508,6 511,15 @@ 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 @@ 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 ? "" : ".");