xref: /plan9/sys/src/cmd/htmlroff/t5.c (revision 426d2b71458df9b491ba6c167f699b3f1f7b0428)
1*426d2b71SDavid du Colombier #include "a.h"
2*426d2b71SDavid du Colombier 
3*426d2b71SDavid du Colombier /*
4*426d2b71SDavid du Colombier  * 5.  Vertical spacing.
5*426d2b71SDavid du Colombier  */
6*426d2b71SDavid du Colombier 
7*426d2b71SDavid du Colombier /* set vertical baseline spacing */
8*426d2b71SDavid du Colombier void
vs(int v)9*426d2b71SDavid du Colombier vs(int v)
10*426d2b71SDavid du Colombier {
11*426d2b71SDavid du Colombier 	if(v == 0)
12*426d2b71SDavid du Colombier 		v = getnr(L(".v0"));
13*426d2b71SDavid du Colombier 	nr(L(".v0"), getnr(L(".v")));
14*426d2b71SDavid du Colombier 	nr(L(".v"), v);
15*426d2b71SDavid du Colombier }
16*426d2b71SDavid du Colombier 
17*426d2b71SDavid du Colombier void
r_vs(int argc,Rune ** argv)18*426d2b71SDavid du Colombier r_vs(int argc, Rune **argv)
19*426d2b71SDavid du Colombier {
20*426d2b71SDavid du Colombier 	if(argc < 2)
21*426d2b71SDavid du Colombier 		vs(eval(L("12p")));
22*426d2b71SDavid du Colombier 	else if(argv[1][0] == '+')
23*426d2b71SDavid du Colombier 		vs(getnr(L(".v"))+evalscale(argv[1]+1, 'p'));
24*426d2b71SDavid du Colombier 	else if(argv[1][0] == '-')
25*426d2b71SDavid du Colombier 		vs(getnr(L(".v"))-evalscale(argv[1]+1, 'p'));
26*426d2b71SDavid du Colombier 	else
27*426d2b71SDavid du Colombier 		vs(evalscale(argv[1], 'p'));
28*426d2b71SDavid du Colombier }
29*426d2b71SDavid du Colombier 
30*426d2b71SDavid du Colombier /* set line spacing */
31*426d2b71SDavid du Colombier void
ls(int v)32*426d2b71SDavid du Colombier ls(int v)
33*426d2b71SDavid du Colombier {
34*426d2b71SDavid du Colombier 	if(v == 0)
35*426d2b71SDavid du Colombier 		v = getnr(L(".ls0"));
36*426d2b71SDavid du Colombier 	nr(L(".ls0"), getnr(L(".ls")));
37*426d2b71SDavid du Colombier 	nr(L(".ls"), v);
38*426d2b71SDavid du Colombier }
39*426d2b71SDavid du Colombier void
r_ls(int argc,Rune ** argv)40*426d2b71SDavid du Colombier r_ls(int argc, Rune **argv)
41*426d2b71SDavid du Colombier {
42*426d2b71SDavid du Colombier 	ls(argc < 2 ? 0 : eval(argv[1]));
43*426d2b71SDavid du Colombier }
44*426d2b71SDavid du Colombier 
45*426d2b71SDavid du Colombier /* .sp - space vertically */
46*426d2b71SDavid du Colombier /* .sv - save a contiguous vertical block */
47*426d2b71SDavid du Colombier void
sp(int v)48*426d2b71SDavid du Colombier sp(int v)
49*426d2b71SDavid du Colombier {
50*426d2b71SDavid du Colombier 	Rune buf[100];
51*426d2b71SDavid du Colombier 	double fv;
52*426d2b71SDavid du Colombier 
53*426d2b71SDavid du Colombier 	br();
54*426d2b71SDavid du Colombier 	fv = v * 1.0/UPI;
55*426d2b71SDavid du Colombier 	if(fv > 5)
56*426d2b71SDavid du Colombier 		fv = eval(L("1v")) * 1.0/UPI;
57*426d2b71SDavid du Colombier 	runesnprint(buf, nelem(buf), "<p style=\"margin-top: 0; margin-bottom: %.2fin\"></p>\n", fv);
58*426d2b71SDavid du Colombier 	outhtml(buf);
59*426d2b71SDavid du Colombier }
60*426d2b71SDavid du Colombier void
r_sp(int argc,Rune ** argv)61*426d2b71SDavid du Colombier r_sp(int argc, Rune **argv)
62*426d2b71SDavid du Colombier {
63*426d2b71SDavid du Colombier 	if(getnr(L(".ns")))
64*426d2b71SDavid du Colombier 		return;
65*426d2b71SDavid du Colombier 	if(argc < 2)
66*426d2b71SDavid du Colombier 		sp(eval(L("1v")));
67*426d2b71SDavid du Colombier 	else{
68*426d2b71SDavid du Colombier 		if(argv[1][0] == '|'){
69*426d2b71SDavid du Colombier 			/* XXX if there's no output yet, do the absolute! */
70*426d2b71SDavid du Colombier 			if(verbose)
71*426d2b71SDavid du Colombier 				warn("ignoring absolute .sp %d", eval(argv[1]+1));
72*426d2b71SDavid du Colombier 			return;
73*426d2b71SDavid du Colombier 		}
74*426d2b71SDavid du Colombier 		sp(evalscale(argv[1], 'v'));
75*426d2b71SDavid du Colombier 	}
76*426d2b71SDavid du Colombier }
77*426d2b71SDavid du Colombier 
78*426d2b71SDavid du Colombier void
r_ns(int argc,Rune ** argv)79*426d2b71SDavid du Colombier r_ns(int argc, Rune **argv)
80*426d2b71SDavid du Colombier {
81*426d2b71SDavid du Colombier 	USED(argc);
82*426d2b71SDavid du Colombier 	USED(argv);
83*426d2b71SDavid du Colombier 	nr(L(".ns"), 1);
84*426d2b71SDavid du Colombier }
85*426d2b71SDavid du Colombier 
86*426d2b71SDavid du Colombier void
r_rs(int argc,Rune ** argv)87*426d2b71SDavid du Colombier r_rs(int argc, Rune **argv)
88*426d2b71SDavid du Colombier {
89*426d2b71SDavid du Colombier 	USED(argc);
90*426d2b71SDavid du Colombier 	USED(argv);
91*426d2b71SDavid du Colombier 	nr(L(".ns"), 0);
92*426d2b71SDavid du Colombier }
93*426d2b71SDavid du Colombier 
94*426d2b71SDavid du Colombier void
t5init(void)95*426d2b71SDavid du Colombier t5init(void)
96*426d2b71SDavid du Colombier {
97*426d2b71SDavid du Colombier 	addreq(L("vs"), r_vs, -1);
98*426d2b71SDavid du Colombier 	addreq(L("ls"), r_ls, -1);
99*426d2b71SDavid du Colombier 	addreq(L("sp"), r_sp, -1);
100*426d2b71SDavid du Colombier 	addreq(L("sv"), r_sp, -1);
101*426d2b71SDavid du Colombier 	addreq(L("os"), r_nop, -1);
102*426d2b71SDavid du Colombier 	addreq(L("ns"), r_ns, 0);
103*426d2b71SDavid du Colombier 	addreq(L("rs"), r_rs, 0);
104*426d2b71SDavid du Colombier 
105*426d2b71SDavid du Colombier 	nr(L(".v"), eval(L("12p")));
106*426d2b71SDavid du Colombier 	nr(L(".v0"), eval(L("12p")));
107*426d2b71SDavid du Colombier 	nr(L(".ls"), 1);
108*426d2b71SDavid du Colombier 	nr(L(".ls0"), 1);
109*426d2b71SDavid du Colombier }
110*426d2b71SDavid du Colombier 
111