aboutsummaryrefslogtreecommitdiff
path: root/contrib/groff/src/preproc/tbl
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@FreeBSD.org>2002-10-11 08:52:17 +0000
committerRuslan Ermilov <ru@FreeBSD.org>2002-10-11 08:52:17 +0000
commitcb16e62e58771a9afb5157ca72a089f2550d39f8 (patch)
tree8c45b0385e4d4d3172ddd7926de65d06c5b2e88b /contrib/groff/src/preproc/tbl
parent427fbef08794a3e7f22acedf86a7e87a0a482e17 (diff)
downloadsrc-cb16e62e58771a9afb5157ca72a089f2550d39f8.tar.gz
src-cb16e62e58771a9afb5157ca72a089f2550d39f8.zip
Virgin import of FSF groff v1.18.1
Notes
Notes: svn path=/vendor/groff/dist/; revision=104862
Diffstat (limited to 'contrib/groff/src/preproc/tbl')
-rw-r--r--contrib/groff/src/preproc/tbl/Makefile.sub6
-rw-r--r--contrib/groff/src/preproc/tbl/main.cc34
-rw-r--r--contrib/groff/src/preproc/tbl/table.h10
-rw-r--r--contrib/groff/src/preproc/tbl/tbl.man346
4 files changed, 332 insertions, 64 deletions
diff --git a/contrib/groff/src/preproc/tbl/Makefile.sub b/contrib/groff/src/preproc/tbl/Makefile.sub
index 224baffcf329..fb148186c970 100644
--- a/contrib/groff/src/preproc/tbl/Makefile.sub
+++ b/contrib/groff/src/preproc/tbl/Makefile.sub
@@ -1,9 +1,9 @@
-PROG=tbl
+PROG=tbl$(EXEEXT)
MAN1=tbl.n
XLIBS=$(LIBGROFF)
OBJS=\
- main.o \
- table.o
+ main.$(OBJEXT) \
+ table.$(OBJEXT)
CCSRCS=\
$(srcdir)/main.cc \
$(srcdir)/table.cc
diff --git a/contrib/groff/src/preproc/tbl/main.cc b/contrib/groff/src/preproc/tbl/main.cc
index b1b14a7113e3..dc0bdceff4d6 100644
--- a/contrib/groff/src/preproc/tbl/main.cc
+++ b/contrib/groff/src/preproc/tbl/main.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -20,7 +20,6 @@ with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "table.h"
-#include "htmlindicate.h"
#define MAX_POINT_SIZE 99
#define MAX_VERTICAL_SPACING 72
@@ -110,7 +109,7 @@ int table_input::get()
else {
state = MIDDLE;
if (c == '\0') {
- error("illegal input character code 0");
+ error("invalid input character code 0");
break;
}
}
@@ -139,7 +138,7 @@ int table_input::get()
current_lineno++;
}
else if (c == '\0') {
- error("illegal input character code 0");
+ error("invalid input character code 0");
break;
}
return c;
@@ -221,8 +220,6 @@ void process_input_file(FILE *fp)
break;
case HAD_TS:
if (c == ' ' || c == '\n' || compatible_flag) {
- printf(".if '\\*(.T'html' \\X(table-start(\n");
- html_begin_suppress(0);
putchar('.');
putchar('T');
putchar('S');
@@ -244,16 +241,12 @@ void process_input_file(FILE *fp)
fputs(".TE", stdout);
while ((c = getc(fp)) != '\n') {
if (c == EOF) {
- printf(".if '\\*(.T'html' \\X(table-end(\n");
- html_end_suppress(0);
putchar('\n');
return;
}
putchar(c);
}
putchar('\n');
- printf(".if '\\*(.T'html' \\X(table-end(\n");
- html_end_suppress(0);
current_lineno++;
}
}
@@ -453,34 +446,39 @@ options *process_options(table_input &in)
}
else if (strieq(p, "center") || strieq(p, "centre")) {
if (arg)
- error("`center' option does not take a argument");
+ error("`center' option does not take an argument");
opt->flags |= table::CENTER;
}
else if (strieq(p, "expand")) {
if (arg)
- error("`expand' option does not take a argument");
+ error("`expand' option does not take an argument");
opt->flags |= table::EXPAND;
}
else if (strieq(p, "box") || strieq(p, "frame")) {
if (arg)
- error("`box' option does not take a argument");
+ error("`box' option does not take an argument");
opt->flags |= table::BOX;
}
else if (strieq(p, "doublebox") || strieq(p, "doubleframe")) {
if (arg)
- error("`doublebox' option does not take a argument");
+ error("`doublebox' option does not take an argument");
opt->flags |= table::DOUBLEBOX;
}
else if (strieq(p, "allbox")) {
if (arg)
- error("`allbox' option does not take a argument");
+ error("`allbox' option does not take an argument");
opt->flags |= table::ALLBOX;
}
else if (strieq(p, "nokeep")) {
if (arg)
- error("`nokeep' option does not take a argument");
+ error("`nokeep' option does not take an argument");
opt->flags |= table::NOKEEP;
}
+ else if (strieq(p, "nospaces")) {
+ if (arg)
+ error("`nospaces' option does not take an argument");
+ opt->flags |= table::NOSPACES;
+ }
else if (strieq(p, "decimalpoint")) {
if (!arg)
error("`decimalpoint' option requires argument in parentheses");
@@ -1214,6 +1212,8 @@ table *process_data(table_input &in, format *f, options *opt)
int ln = current_lineno;
if (c == '\n')
--ln;
+ if ((opt->flags & table::NOSPACES))
+ input_entry.remove_spaces();
while (col < ncolumns
&& line_format[col].type == FORMAT_SPAN) {
tbl->add_entry(current_row, col, "", &line_format[col],
@@ -1385,7 +1385,7 @@ table *process_data(table_input &in, format *f, options *opt)
f = newf;
}
if (line.length() >= 3
- && line[0] == '.' && line[1] == 'f' && line[2] == 'f') {
+ && line[0] == '.' && line[1] == 'l' && line[2] == 'f') {
line += '\0';
interpret_lf_args(line.contents() + 3);
}
diff --git a/contrib/groff/src/preproc/tbl/table.h b/contrib/groff/src/preproc/tbl/table.h
index ca55b8026c22..69959b899e4c 100644
--- a/contrib/groff/src/preproc/tbl/table.h
+++ b/contrib/groff/src/preproc/tbl/table.h
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,7 +19,8 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
@@ -29,7 +31,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "stringclass.h"
#include "errarg.h"
#include "error.h"
-#include "lib.h"
struct inc_number {
short inc;
@@ -127,7 +128,8 @@ public:
BOX = 04,
ALLBOX = 010,
DOUBLEBOX = 020,
- NOKEEP = 040
+ NOKEEP = 040,
+ NOSPACES = 0100
};
table(int nc, unsigned flags, int linesize, char decimal_point_char);
~table();
diff --git a/contrib/groff/src/preproc/tbl/tbl.man b/contrib/groff/src/preproc/tbl/tbl.man
index 42dac2524dfe..f661fdeaae2f 100644
--- a/contrib/groff/src/preproc/tbl/tbl.man
+++ b/contrib/groff/src/preproc/tbl/tbl.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-1995, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-1995, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -19,14 +19,18 @@ the original English.
.TH @G@TBL @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
@g@tbl \- format tables for troff
+.
+.
.SH SYNOPSIS
.B @g@tbl
[
.B \-Cv
]
[
-.IR files \|.\|.\|.
+.IR files \|.\|.\|.\&
]
+.
+.
.SH DESCRIPTION
This manual page describes the GNU version of
.BR tbl ,
@@ -53,6 +57,8 @@ will be read.
A filename of
.B \-
will cause the standard input to be read.
+.
+.
.SH OPTIONS
.TP
.B \-C
@@ -64,47 +70,297 @@ even when followed by a character other than space or newline.
.TP
.B \-v
Print the version number.
+.
+.
.SH USAGE
-Only the differences between GNU
.B tbl
-and Unix
-.B tbl
-are described here.
-.LP
+expects to find table descriptions wrapped in the
+.B .TS
+(table start) and
+.B .TE
+(table end) macros.
+The line immediately following the
+.B .TS
+macro may contain any of the following global options (ignoring the case
+of characters -- Unix tbl only accepts options with all characters lowercase
+or all characters uppercase):
+.
+.TP
+.B center
+Centers the table (default is left-justified).
+The alternative keyword name
+.B centre
+is also recognized (this is a GNU tbl extension).
+.
+.TP
+.BI delim( xy )
+Use
+.I x
+and
+.I y
+as start and end delimiters for
+.BR @g@eqn (@MAN1EXT@).
+.
+.TP
+.B expand
+Makes the table as wide as the current line length.
+.
+.TP
+.B box
+Encloses the table in a box.
+.
+.TP
+.B doublebox
+Encloses the table in a double box.
+.
+.TP
+.B allbox
+Encloses each item of the table in a box.
+.
+.TP
+.B frame
+Same as box (GNU tbl only).
+.
+.TP
+.B doubleframe
+Same as doublebox (GNU tbl only).
+.
+.TP
+.BI tab( x )
+Uses the character
+.I x
+instead of a tab to separate items in a line of input data.
+.
+.TP
+.BI linesize( n )
+Sets lines or rules (e.g. from
+.BR box )
+in
+.IR n -point
+type.
+.
+.TP
+.B nokeep
+Don't use diversions to prevent page breaks (GNU tbl only).
Normally
.B tbl
attempts to prevent undesirable breaks in the table by using diversions.
-This can sometimes interact badly with macro packages' own use of diversions,
-when footnotes, for example, are used.
-The
-.B nokeep
-option tells
-.B tbl
-not to try and prevent breaks in this way.
+This can sometimes interact badly with macro packages' own use of
+diversions, when footnotes, for example, are used.
+.
+.TP
+.BI decimalpoint( c )
+Set the character to be recognized as the decimal point in numeric
+columns (GNU tbl only).
+.
+.TP
+.B nospaces
+Ignore leading and trailing spaces in data items (GNU tbl only).
+.
.LP
-The
-.B decimalpoint
-option specifies the character to be recognized as the decimal
-point character in place of the default period.
-It takes an argument in parentheses, which must be a single
-character, as for the
+The global options must end with a semicolon.
+There might be whitespace after an option and its argument in parentheses.
+.LP
+After global options come lines describing the format of each line of
+the table.
+Each such format line describes one line of the table itself, except that
+the last format line (which you must end with a period) describes all
+remaining lines of the table.
+A single key character describes each column of each line of the table.
+You may run format specs for multiple lines together on the same line by
+separating them with commas.
+.LP
+You may follow each key character with specifiers that determine the font
+and point size of the corresponding item, that determine column width,
+inter-column spacing, etc.
+.LP
+The longest format line defines the number of columns in the table; missing
+format descriptors at the end of format lines are assumed to be `L'.
+Extra columns in the data (which have no corresponding format entry) are
+ignored.
+.LP
+The available key characters are:
+.
+.TP
+c,C
+Centers item within the column.
+.
+.TP
+r,R
+Right-justifies item within the column.
+.
+.TP
+l,L
+Left-justifies item within the column.
+.
+.TP
+n,N
+Numerically justifies item in the column: Units positions of numbers are
+aligned vertically.
+.
+.TP
+s,S
+Spans previous item on the left into this column.
+.
+.TP
+a,A
+Centers longest line in this column and then left-justifies all other lines
+in this column with respect to that centered line.
+.
+.TP
+^
+Spans down entry from previous row in this column.
+.
+.TP
+_,-
+Replaces this entry with a horizontal line.
+.
+.TP
+=
+.
+Replaces this entry with a double horizontal line.
+.
+.TP
+|
+The corresponding column becomes a vertical rule (if two of these are
+adjacent, a double vertical rule).
+.
+.LP
+A vertical bar to the left of the first key-letter or to the right of the
+last one produces a line at the edge of the table.
+.LP
+Here are the specifiers that can appear in suffixes to column key letters:
+.
+.TP
+b,B
+Short form of fB (make affected entries bold).
+.
+.TP
+i,I
+Short form of fI (make affected entries italic).
+.
+.TP
+t,T
+Start an item vertically spanning rows at the top of its range rather than
+vertically centering it.
+.
+.TP
+d,D
+Start an item vertically spanning rows at the bottom of its range rather
+than vertically centering it (GNU tbl only).
+.
+.TP
+v,V
+Followed by a number, this indicates the vertical line spacing to be used in
+a multi-line table entry.
+If signed, the current vertical line spacing is incremented or decremented
+(using a signed number instead of a signed digit is a GNU tbl extension).
+A vertical line spacing specifier followed by a column separation number
+must be separated by one or more blanks.
+No effect if the corresponding table entry isn't a text block.
+.
+.TP
+f,F
+Either of these specifiers may be followed by a font name (either one or two
+characters long), font number (a single digit), or long name in parentheses
+(the last form is a GNU tbl extension).
+A one-letter font name must be separated by one or more blanks from whatever
+follows.
+.
+.TP
+p,P
+Followed by a number, this does a point size change for the affected fields.
+If signed, the current point size is incremented or decremented (using a
+signed number instead of a signed digit is a GNU tbl extension).
+A point size specifier followed by a column separation number must be
+separated by one or more blanks.
+.
+.TP
+w,W
+Minimal column width value.
+Must be followed either by a
+.BR @g@troff (@MAN1EXT@)
+width expression in parentheses or a unitless integer.
+If no unit is given, en units are used.
+Also used as the default line length for included text blocks.
+If used multiple times, the last entry takes effect.
+.
+.TP
+e,E
+Make equally-spaced columns.
+.
+.TP
+u,U
+Move the corresponding column up one half-line.
+.
+.TP
+z,Z
+Ignore the corresponding column for width-calculation purposes.
+.
+.LP
+A number suffix on a key character is interpreted as a column
+separation in ens (multiplied in proportion if the
+.B expand
+option is on).
+Default separation is 3n.
+.LP
+The format lines are followed by lines containing the actual data for the
+table, followed finally by
+.BR .TE .
+Within such data lines, items are normally separated by tab characters (or
+the character specified with the
.B tab
-option.
+option).
+Long input lines can be broken across multiple lines if the last character
+on the line is `\e' (which vanishes after concatenation).
.LP
-The
-.B f
-format modifier can be followed by an arbitrary length
-font name in parentheses.
-.LP
-There is a
-.B d
-format modifier which means that a vertically spanning entry
-should be aligned at the bottom of its range.
-.LP
-There is no limit on the number of columns in a table, nor any limit
-on the number of text blocks.
-All the lines of a table are considered in deciding column
-widths, not just the first 200.
+A dot starting a line, followed by anything but a digit is handled as a
+troff command, passed through without changes.
+The table position is unchanged in this case.
+.LP
+If a data line consists of only `_' or `=', a single or double line,
+respectively, is drawn across the table at that point; if a single item in a
+data line consists of only `_' or `=', then that item is replaced by a
+single or double line, joining its neighbours.
+If a data item consists only of `\e_' or `\e=', a single or double line,
+respectively, is drawn across the field at that point which does not join
+its neighbours.
+.LP
+A data item consisting only of `\eRx' (`x' any character) is replaced by
+repetitions of character `x' as wide as the column (not joining its
+neighbours).
+.LP
+A data item consisting only of `\e^' indicates that the field immediately
+above spans downward over this row.
+.LP
+A text block can be used to enter data as a single entry which would be
+too long as a simple string between tabs.
+It is started with `T{' and closed with `T}'.
+The latter must start a line, probably followed by other data columns
+(separated with tabs).
+.LP
+To change the data format within a table, use the
+.B .T&
+command (at the start of a line).
+It is followed by format and data lines (but no global options) similar to
+the
+.B .TS
+request.
+.
+.
+.SH "INTERACTION WITH @G@EQN"
+.BR @g@tbl (@MAN1EXT@)
+should always be called before
+.BR @g@eqn (@MAN1EXT@)
+.RB ( groff (@MAN1EXT@)
+automatically takes care of the correct order of preprocessors).
+.
+.
+.SH "GNU TBL ENHANCEMENTS"
+There is no limit on the number of columns in a table, nor any limit on the
+number of text blocks.
+All the lines of a table are considered in deciding column widths, not just
+the first 200.
Table continuation
.RB ( .T& )
lines are not restricted to the first 200 lines.
@@ -113,13 +369,15 @@ Numeric and alphabetic items may appear in the same column.
.LP
Numeric and alphabetic items may span horizontally.
.LP
-.B tbl
-uses register, string, macro and diversion names beginning with
+.B @g@tbl
+uses register, string, macro and diversion names beginning with the digit\~\c
.BR 3 .
When using
-.B tbl
-you should avoid using any names beginning with a
+.B @g@tbl
+you should avoid using any names beginning with a\~\c
.BR 3 .
+.
+.
.SH BUGS
You should use
.BR .TS\ H / .TH
@@ -157,7 +415,7 @@ instead of
.BR bp .
.LP
Using \ea directly in a table to get leaders will not work.
-This is correct behaviour: \ea is a
+This is correct behaviour: \ea is an
.B uninterpreted
leader.
To get leaders use a real leader, either by using a control A or like
@@ -173,6 +431,14 @@ A\e*a;B
\&.TE
.ft
.fi
+.
+.
+.SH REFERENCE
+Lesk, M.E.: "TBL -- A Program to Format Tables".
+For copyright reasons it cannot be included in the groff distribution,
+but copies can be found with a title search on the World Wide Web.
+.
+.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@)