| #include "a.h" |
| |
| /* |
| * 5. Vertical spacing. |
| */ |
| |
| /* set vertical baseline spacing */ |
| void |
| vs(int v) |
| { |
| if(v == 0) |
| v = getnr(L(".v0")); |
| nr(L(".v0"), getnr(L(".v"))); |
| nr(L(".v"), v); |
| } |
| |
| void |
| r_vs(int argc, Rune **argv) |
| { |
| if(argc < 2) |
| vs(eval(L("12p"))); |
| else if(argv[1][0] == '+') |
| vs(getnr(L(".v"))+evalscale(argv[1]+1, 'p')); |
| else if(argv[1][0] == '-') |
| vs(getnr(L(".v"))-evalscale(argv[1]+1, 'p')); |
| else |
| vs(evalscale(argv[1], 'p')); |
| } |
| |
| /* set line spacing */ |
| void |
| ls(int v) |
| { |
| if(v == 0) |
| v = getnr(L(".ls0")); |
| nr(L(".ls0"), getnr(L(".ls"))); |
| nr(L(".ls"), v); |
| } |
| void |
| r_ls(int argc, Rune **argv) |
| { |
| ls(argc < 2 ? 0 : eval(argv[1])); |
| } |
| |
| /* .sp - space vertically */ |
| /* .sv - save a contiguous vertical block */ |
| void |
| sp(int v) |
| { |
| Rune buf[100]; |
| double fv; |
| |
| br(); |
| fv = v * 1.0/UPI; |
| if(fv > 5) |
| fv = eval(L("1v")) * 1.0/UPI; |
| runesnprint(buf, nelem(buf), "<p style=\"margin-top: 0; margin-bottom: %.2fin\"></p>\n", fv); |
| outhtml(buf); |
| } |
| void |
| r_sp(int argc, Rune **argv) |
| { |
| if(getnr(L(".ns"))) |
| return; |
| if(argc < 2) |
| sp(eval(L("1v"))); |
| else{ |
| if(argv[1][0] == '|'){ |
| /* XXX if there's no output yet, do the absolute! */ |
| if(verbose) |
| warn("ignoring absolute .sp %d", eval(argv[1]+1)); |
| return; |
| } |
| sp(evalscale(argv[1], 'v')); |
| } |
| } |
| |
| void |
| r_ns(int argc, Rune **argv) |
| { |
| USED(argc); |
| USED(argv); |
| nr(L(".ns"), 1); |
| } |
| |
| void |
| r_rs(int argc, Rune **argv) |
| { |
| USED(argc); |
| USED(argv); |
| nr(L(".ns"), 0); |
| } |
| |
| void |
| t5init(void) |
| { |
| addreq(L("vs"), r_vs, -1); |
| addreq(L("ls"), r_ls, -1); |
| addreq(L("sp"), r_sp, -1); |
| addreq(L("sv"), r_sp, -1); |
| addreq(L("os"), r_nop, -1); |
| addreq(L("ns"), r_ns, 0); |
| addreq(L("rs"), r_rs, 0); |
| |
| nr(L(".v"), eval(L("12p"))); |
| nr(L(".v0"), eval(L("12p"))); |
| nr(L(".ls"), 1); |
| nr(L(".ls0"), 1); |
| } |
| |