aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/htmlroff/t5.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/htmlroff/t5.c')
-rw-r--r--src/cmd/htmlroff/t5.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/cmd/htmlroff/t5.c b/src/cmd/htmlroff/t5.c
new file mode 100644
index 00000000..cb951951
--- /dev/null
+++ b/src/cmd/htmlroff/t5.c
@@ -0,0 +1,110 @@
+#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);
+}
+