summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--roff.786
-rw-r--r--tbl_layout.c35
2 files changed, 92 insertions, 29 deletions
diff --git a/roff.7 b/roff.7
index 5f5c82d3..decf7b2e 100644
--- a/roff.7
+++ b/roff.7
@@ -535,6 +535,11 @@ This request is intended to have one argument,
consisting of an even number of characters.
Currently, it is ignored including its arguments,
and the number of arguments is not checked.
+.\" .Ss \&T&
+.\" Re-start a table layout, retaining the options of the prior table
+.\" invocation.
+.\" See
+.\" .Sx \&TS .
.\" .Ss \&TE
.\" End a table context.
.\" See
@@ -581,6 +586,81 @@ and the number of arguments is not checked.
.\" .Pp
.\" in the case of
.\" .Xr man 7 .
+.\" .Pp
+.\" The first line of a table consists of its options, which consists of
+.\" space-separated keys and modifiers terminated by a semicolon.
+.\" If the first line does not have a terminating semicolon, it is assumed
+.\" that no options are specified and instead a layout is processed.
+.\" Some options accept arguments enclosed by paranthesis.
+.\" The following case-insensitive options are available:
+.\" .Bl -tag -width Ds
+.\" .It Cm center
+.\" This may also be invoked with
+.\" .Cm centre .
+.\" .It Cm delim
+.\" Accepts a two-character argument.
+.\" This option is ignored.
+.\" .It Cm expand
+.\" .It Cm box
+.\" This may also be invoked with
+.\" .Cm frame .
+.\" .It Cm doublebox
+.\" This may also be invoked with
+.\" .Cm doubleframe .
+.\" .It Cm allbox
+.\" .It Cm tab
+.\" Accepts a single character argument used as the delimiter for cells in
+.\" data rows.
+.\" .It Cm linesize
+.\" Accepts a natural number (all digits) used as the line width for drawing
+.\" boxes.
+.\" .It Cm nokeep
+.\" .It Cm decimalpoint
+.\" .It Cm nospaces
+.\" .El
+.\" .Pp
+.\" The table layout follows table options, except in the case of
+.\" .Sx \&T& ,
+.\" where it immediately procedes invocation.
+.\" Layout specifies how data rows are displayed on output.
+.\" Each layout line corresponds to a line of data; the last layout line
+.\" applies to all remaining data lines.
+.\" Layout lines may also be separated by a comma.
+.\" Each layout cell consists of one of the following case-insensitive keys:
+.\" .Bl -tag -width Ds
+.\" .It Cm c
+.\" .It Cm r
+.\" .It Cm l
+.\" .It Cm n
+.\" .It Cm s
+.\" .It Cm a
+.\" .It Cm ^
+.\" .It Cm \-
+.\" This may also be invoked with
+.\" .Cm _ .
+.\" .It Cm =
+.\" .It Cm \(ba
+.\" .It Cm \(ba\(ba
+.\" .El
+.\" Keys may be followed by a set of modifiers.
+.\" A modifier is either a modifier key or a natural number for specifying
+.\" spacing.
+.\" The following case-insensitive modifier keys are available:
+.\" .Bl -tag -width Ds
+.\" .It Cm z
+.\" .It Cm u
+.\" .It Cm e
+.\" .It Cm t
+.\" .It Cm d
+.\" .It Cm f
+.\" Must be followed by a case-insensitive font style:
+.\" .Cm b
+.\" for bold or
+.\" .Cm i
+.\" for italic.
+.\" .It Cm b
+.\" .It Cm i
+.\" .El
.Sh COMPATIBILITY
This section documents compatibility between mandoc and other other
.Nm
@@ -612,6 +692,12 @@ using the next-line syntax.
.Xr man 7 ,
.Xr mandoc_char 7 ,
.Xr mdoc 7
+.\" .Rs
+.\" .%A M. E. Lesk
+.\" .%T Tbl\(emA Program to Format Tables
+.\" .%D June 11, 1976
+.\" .%U http://www.kohala.com/start/troff/v7/man/tbl/tbl.ps
+.\" .Re
.Rs
.%A Joseph F. Ossanna
.%A Brian W. Kernighan
diff --git a/tbl_layout.c b/tbl_layout.c
index 004b3337..6262fafe 100644
--- a/tbl_layout.c
+++ b/tbl_layout.c
@@ -28,21 +28,15 @@ struct tbl_phrase {
enum tbl_cellt key;
};
-#define KEYS_MAX 17
+#define KEYS_MAX 11
static const struct tbl_phrase keys[KEYS_MAX] = {
{ 'c', TBL_CELL_CENTRE },
- { 'C', TBL_CELL_CENTRE },
{ 'r', TBL_CELL_RIGHT },
- { 'R', TBL_CELL_RIGHT },
{ 'l', TBL_CELL_LEFT },
- { 'L', TBL_CELL_LEFT },
{ 'n', TBL_CELL_NUMBER },
- { 'N', TBL_CELL_NUMBER },
{ 's', TBL_CELL_SPAN },
- { 'S', TBL_CELL_SPAN },
{ 'a', TBL_CELL_LONG },
- { 'A', TBL_CELL_LONG },
{ '^', TBL_CELL_DOWN },
{ '-', TBL_CELL_HORIZ },
{ '_', TBL_CELL_HORIZ },
@@ -111,56 +105,39 @@ mod:
/* TODO: GNU has many more extensions. */
- switch (p[(*pos)++]) {
+ switch (tolower(p[(*pos)++])) {
case ('z'):
- /* FALLTHROUGH */
- case ('Z'):
cp->flags |= TBL_CELL_WIGN;
goto mod;
case ('u'):
- /* FALLTHROUGH */
- case ('U'):
cp->flags |= TBL_CELL_UP;
goto mod;
case ('e'):
- /* FALLTHROUGH */
- case ('E'):
cp->flags |= TBL_CELL_EQUAL;
goto mod;
case ('t'):
- /* FALLTHROUGH */
- case ('T'):
cp->flags |= TBL_CELL_TALIGN;
goto mod;
case ('d'):
- /* FALLTHROUGH */
- case ('D'):
cp->flags |= TBL_CELL_BALIGN;
goto mod;
case ('f'):
- /* FALLTHROUGH */
- case ('B'):
- /* FALLTHROUGH */
- case ('I'):
- /* FALLTHROUGH */
+ break;
case ('b'):
/* FALLTHROUGH */
case ('i'):
+ (*pos)--;
break;
default:
TBL_MSG(tbl, MANDOCERR_TBLLAYOUT, ln, *pos - 1);
return(0);
}
- switch (p[(*pos)++]) {
+ switch (tolower(p[(*pos)++])) {
case ('b'):
- /* FALLTHROUGH */
- case ('B'):
cp->flags |= TBL_CELL_BOLD;
goto mod;
case ('i'):
- /* FALLTHROUGH */
- case ('I'):
cp->flags |= TBL_CELL_ITALIC;
goto mod;
default:
@@ -182,7 +159,7 @@ cell(struct tbl *tbl, struct tbl_row *rp,
/* Parse the column position (`r', `R', `|', ...). */
for (i = 0; i < KEYS_MAX; i++)
- if (p[*pos] == keys[i].name)
+ if (tolower(p[*pos]) == keys[i].name)
break;
if (KEYS_MAX == i) {