plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

t5.c (1746B)


      1 #include "a.h"
      2 
      3 /*
      4  * 5.  Vertical spacing.
      5  */
      6 
      7 /* set vertical baseline spacing */
      8 void
      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
     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
     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
     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
     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
     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
     79 r_ns(int argc, Rune **argv)
     80 {
     81 	USED(argc);
     82 	USED(argv);
     83 	nr(L(".ns"), 1);
     84 }
     85 
     86 void
     87 r_rs(int argc, Rune **argv)
     88 {
     89 	USED(argc);
     90 	USED(argv);
     91 	nr(L(".ns"), 0);
     92 }
     93 
     94 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 }