diff options
Diffstat (limited to 'src/cmd/tbl/tg.c')
-rw-r--r-- | src/cmd/tbl/tg.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/cmd/tbl/tg.c b/src/cmd/tbl/tg.c new file mode 100644 index 00000000..6abb1490 --- /dev/null +++ b/src/cmd/tbl/tg.c @@ -0,0 +1,81 @@ +/* tg.c: process included text blocks */ +# include "t.h" + +int +gettext(char *sp, int ilin, int icol, char *fn, char *sz) +{ + /* get a section of text */ + char line[4096]; + int oname; + char *vs; + + if (texname == 0) + error("Too many text block diversions"); + if (textflg == 0) { + Bprint(&tabout, ".nr %d \\n(.lu\n", SL); /* remember old line length */ + textflg = 1; + } + Bprint(&tabout, ".eo\n"); + Bprint(&tabout, ".am %s\n", reg(icol, CRIGHT)); + Bprint(&tabout, ".br\n"); + Bprint(&tabout, ".di %c+\n", texname); + rstofill(); + if (fn && *fn) + Bprint(&tabout, ".nr %d \\n(.f\n.ft %s\n", S1, fn); + Bprint(&tabout, ".ft \\n(.f\n"); /* protect font */ + vs = vsize[icol][stynum[ilin]]; + if ((sz && *sz) || (vs && *vs)) { + Bprint(&tabout, ".nr %d \\n(.v\n", S9); + if (vs == 0 || *vs == 0) + vs = "\\n(.s+2"; + if (sz && *sz) + Bprint(&tabout, ".ps %s\n", sz); + Bprint(&tabout, ".vs %s\n", vs); + Bprint(&tabout, ".if \\n(%du>\\n(.vu .sp \\n(%du-\\n(.vu\n", S9, S9); + } + if (cll[icol][0]) + Bprint(&tabout, ".ll %sn\n", cll[icol]); + else + Bprint(&tabout, ".ll \\n(%du*%du/%du\n", SL, ctspan(ilin, icol), ncol + 1); + Bprint(&tabout, ".if \\n(.l<\\n(%2s .ll \\n(%2su\n", reg(icol, CRIGHT), + reg(icol, CRIGHT)); + if (ctype(ilin, icol) == 'a') + Bprint(&tabout, ".ll -2n\n"); + Bprint(&tabout, ".in 0\n"); + while (gets1(line, sizeof(line))) { + if (line[0] == 'T' && line[1] == '}' && line[2] == tab) + break; + if (match("T}", line)) + break; + Bprint(&tabout, "%s\n", line); + } + if (fn && *fn) + Bprint(&tabout, ".ft \\n(%d\n", S1); + if (sz && *sz) + Bprint(&tabout, ".br\n.ps\n.vs\n"); + Bprint(&tabout, ".br\n"); + Bprint(&tabout, ".di\n"); + Bprint(&tabout, ".nr %c| \\n(dn\n", texname); + Bprint(&tabout, ".nr %c- \\n(dl\n", texname); + Bprint(&tabout, "..\n"); + Bprint(&tabout, ".ec \\\n"); + /* copy remainder of line */ + if (line[2]) + tcopy (sp, line + 3); + else + *sp = 0; + oname = texname; + texname = texstr[++texct]; + return(oname); +} + + +void +untext(void) +{ + rstofill(); + Bprint(&tabout, ".nf\n"); + Bprint(&tabout, ".ll \\n(%du\n", SL); +} + + |