t5.c 1.7 KB

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