diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-01-04 12:06:21 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-01-04 12:06:21 +0000 |
commit | b6b883b7b599dbe343a853c4f09d0d994f8ce23e (patch) | |
tree | 7bbdea5d7915ac7663b656e97a65eafaf0f20a2f | |
parent | 241958eedf37464b69731b4b8417dda97c3be391 (diff) | |
download | mandoc-b6b883b7b599dbe343a853c4f09d0d994f8ce23e.tar.gz |
Fix to make horizontal spanners in the layout be properly printed.
mandoc also now warns (so does tbl(1)) if a horizontal spanner is
specified along with data.
While here, fix up some documentation and uncomment the tbl reference.
-rw-r--r-- | main.c | 2 | ||||
-rw-r--r-- | mandoc.h | 1 | ||||
-rw-r--r-- | roff.7 | 69 | ||||
-rw-r--r-- | tbl_data.c | 5 | ||||
-rw-r--r-- | tbl_term.c | 37 |
5 files changed, 65 insertions, 49 deletions
@@ -189,6 +189,8 @@ static const char * const mandocerrs[MANDOCERR_MAX] = { "bad table layout", "no table layout cells specified", "no table data cells specified", + "ignore data in cell", + "input stack limit exceeded, infinite loop?", "skipping bad character", "skipping text before the first section header", @@ -111,6 +111,7 @@ enum mandocerr { MANDOCERR_TBLLAYOUT, /* bad table layout */ MANDOCERR_TBLNOLAYOUT, /* no table layout cells specified */ MANDOCERR_TBLNODATA, /* no table data cells specified */ + MANDOCERR_TBLIGNDATA, /* ignore data in cell */ MANDOCERR_ROFFLOOP, /* input stack limit exceeded, infinite loop? */ MANDOCERR_BADCHAR, /* skipping bad character */ @@ -681,34 +681,61 @@ This option is not supported by This option is not supported by .Xr mandoc 1 . .It Cm \- +Replace the data cell (its contents will be lost) with a single +horizontal line. This may also be invoked with .Cm _ . .It Cm = +Replace the data cell (its contents will be lost) with a double +horizontal line. .It Cm \(ba Emit a vertical bar instead of data. .It Cm \(ba\(ba Emit a double-vertical bar instead of data. .El .Pp +For example, following layout specifies a centre-justified column of +minimum width 10, followed by vertical bar, followed by a left-justified +column of minimum width 10, another vertical bar, then a column +justified about the decimal point in numbers: +.Pp +.Dl c10 | l10 | n +.Pp 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 +.Cm z , +.Cm u , +.Cm e , +.Cm t , +.Cm d , +.Cm f , +.Cm b , +.Cm i , +.Cm b , +and +.Cm i . +All of these are ignored by +.Xr mandoc 1 . +.Pp +The data section follows the last layout row. +By default, cells in a data section are delimited by a tab. +This behaviour may be changed with the +.Cm tab +option. +If +.Cm _ +or +.Cm = +is specified, a single or double line, respectively, is drawn across the +data field. +If +.Cm \e- +or +.Cm \e= +is specified, a line is drawn within the data field (i.e., terminating +within the cell and not draw to the border). .Sh COMPATIBILITY This section documents compatibility between mandoc and other other .Nm @@ -740,12 +767,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 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 @@ -82,6 +82,11 @@ data(struct tbl_node *tbl, struct tbl_span *dp, dat->pos = TBL_DATA_NDHORIZ; else dat->pos = TBL_DATA_DATA; + + if (TBL_CELL_HORIZ == dat->layout->pos || + TBL_CELL_DHORIZ == dat->layout->pos) + if (TBL_DATA_DATA == dat->pos && '\0' != *dat->string) + TBL_MSG(tbl, MANDOCERR_TBLIGNDATA, ln, sv); } int @@ -40,9 +40,6 @@ static void tbl_data_number(struct termp *, static void tbl_data_literal(struct termp *, const struct tbl_dat *, const struct termp_tbl *); -static void tbl_data_spanner(struct termp *, - const struct tbl_dat *, - const struct termp_tbl *); static void tbl_data(struct termp *, const struct tbl *, const struct tbl_dat *, const struct termp_tbl *); @@ -261,8 +258,13 @@ tbl_data(struct termp *tp, const struct tbl *tbl, switch (dp->pos) { case (TBL_DATA_HORIZ): /* FALLTHROUGH */ + case (TBL_DATA_NHORIZ): + tbl_char(tp, '-', tbp->width); + return; + case (TBL_DATA_NDHORIZ): + /* FALLTHROUGH */ case (TBL_DATA_DHORIZ): - tbl_data_spanner(tp, dp, tbp); + tbl_char(tp, '=', tbp->width); return; default: break; @@ -272,10 +274,10 @@ tbl_data(struct termp *tp, const struct tbl *tbl, switch (pos) { case (TBL_CELL_HORIZ): - /* FALLTHROUGH */ + tbl_char(tp, '-', tbp->width); + break; case (TBL_CELL_DHORIZ): - /* FIXME: THIS IS WRONG. */ - tbl_data_spanner(tp, dp, tbp); + tbl_char(tp, '=', tbp->width); break; case (TBL_CELL_LONG): /* FALLTHROUGH */ @@ -319,7 +321,6 @@ tbl_vframe(struct termp *tp, const struct tbl *tbl) term_word(tp, "|"); } - static inline void tbl_char(struct termp *tp, char c, int len) { @@ -336,26 +337,6 @@ tbl_char(struct termp *tp, char c, int len) } static void -tbl_data_spanner(struct termp *tp, - const struct tbl_dat *dp, - const struct termp_tbl *tblp) -{ - - switch (dp->pos) { - case (TBL_DATA_HORIZ): - case (TBL_DATA_NHORIZ): - tbl_char(tp, '-', tblp->width); - break; - case (TBL_DATA_DHORIZ): - case (TBL_DATA_NDHORIZ): - tbl_char(tp, '=', tblp->width); - break; - default: - break; - } -} - -static void tbl_data_literal(struct termp *tp, const struct tbl_dat *dp, const struct termp_tbl *tblp) |