xref: /plan9/sys/src/cmd/tbl/tg.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier /* tg.c: process included text blocks */
23e12c5d1SDavid du Colombier # include "t.h"
33e12c5d1SDavid du Colombier 
43e12c5d1SDavid du Colombier int
53e12c5d1SDavid du Colombier gettext(char *sp, int ilin, int icol, char *fn, char *sz)
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier 					/* get a section of text */
83e12c5d1SDavid du Colombier 	char	line[4096];
93e12c5d1SDavid du Colombier 	int	oname;
103e12c5d1SDavid du Colombier 	char	*vs;
113e12c5d1SDavid du Colombier 
123e12c5d1SDavid du Colombier 	if (texname == 0)
133e12c5d1SDavid du Colombier 		error("Too many text block diversions");
143e12c5d1SDavid du Colombier 	if (textflg == 0) {
15*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".nr %d \\n(.lu\n", SL); /* remember old line length */
163e12c5d1SDavid du Colombier 		textflg = 1;
173e12c5d1SDavid du Colombier 	}
18*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".eo\n");
19*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".am %s\n", reg(icol, CRIGHT));
20*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".br\n");
21*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".di %c+\n", texname);
223e12c5d1SDavid du Colombier 	rstofill();
233e12c5d1SDavid du Colombier 	if (fn && *fn)
24*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".nr %d \\n(.f\n.ft %s\n", S1, fn);
25*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".ft \\n(.f\n"); /* protect font */
263e12c5d1SDavid du Colombier 	vs = vsize[icol][stynum[ilin]];
273e12c5d1SDavid du Colombier 	if ((sz && *sz) || (vs && *vs)) {
28*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".nr %d \\n(.v\n", S9);
293e12c5d1SDavid du Colombier 		if (vs == 0 || *vs == 0)
303e12c5d1SDavid du Colombier 			vs = "\\n(.s+2";
313e12c5d1SDavid du Colombier 		if (sz && *sz)
32*219b2ee8SDavid du Colombier 			Bprint(&tabout, ".ps %s\n", sz);
33*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".vs %s\n", vs);
34*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".if \\n(%du>\\n(.vu .sp \\n(%du-\\n(.vu\n", S9, S9);
353e12c5d1SDavid du Colombier 	}
363e12c5d1SDavid du Colombier 	if (cll[icol][0])
37*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".ll %sn\n", cll[icol]);
383e12c5d1SDavid du Colombier 	else
39*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".ll \\n(%du*%du/%du\n", SL, ctspan(ilin, icol), ncol + 1);
40*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".if \\n(.l<\\n(%2s .ll \\n(%2su\n", reg(icol, CRIGHT),
413e12c5d1SDavid du Colombier 	     reg(icol, CRIGHT));
423e12c5d1SDavid du Colombier 	if (ctype(ilin, icol) == 'a')
43*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".ll -2n\n");
44*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".in 0\n");
453e12c5d1SDavid du Colombier 	while (gets1(line, sizeof(line))) {
463e12c5d1SDavid du Colombier 		if (line[0] == 'T' && line[1] == '}' && line[2] == tab)
473e12c5d1SDavid du Colombier 			break;
483e12c5d1SDavid du Colombier 		if (match("T}", line))
493e12c5d1SDavid du Colombier 			break;
50*219b2ee8SDavid du Colombier 		Bprint(&tabout, "%s\n", line);
513e12c5d1SDavid du Colombier 	}
523e12c5d1SDavid du Colombier 	if (fn && *fn)
53*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".ft \\n(%d\n", S1);
543e12c5d1SDavid du Colombier 	if (sz && *sz)
55*219b2ee8SDavid du Colombier 		Bprint(&tabout, ".br\n.ps\n.vs\n");
56*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".br\n");
57*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".di\n");
58*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".nr %c| \\n(dn\n", texname);
59*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".nr %c- \\n(dl\n", texname);
60*219b2ee8SDavid du Colombier 	Bprint(&tabout, "..\n");
61*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".ec \\\n");
623e12c5d1SDavid du Colombier 	/* copy remainder of line */
633e12c5d1SDavid du Colombier 	if (line[2])
643e12c5d1SDavid du Colombier 		tcopy (sp, line + 3);
653e12c5d1SDavid du Colombier 	else
663e12c5d1SDavid du Colombier 		*sp = 0;
673e12c5d1SDavid du Colombier 	oname = texname;
683e12c5d1SDavid du Colombier 	texname = texstr[++texct];
693e12c5d1SDavid du Colombier 	return(oname);
703e12c5d1SDavid du Colombier }
713e12c5d1SDavid du Colombier 
723e12c5d1SDavid du Colombier 
733e12c5d1SDavid du Colombier void
743e12c5d1SDavid du Colombier untext(void)
753e12c5d1SDavid du Colombier {
763e12c5d1SDavid du Colombier 	rstofill();
77*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".nf\n");
78*219b2ee8SDavid du Colombier 	Bprint(&tabout, ".ll \\n(%du\n", SL);
793e12c5d1SDavid du Colombier }
803e12c5d1SDavid du Colombier 
813e12c5d1SDavid du Colombier 
82