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