tt.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /* tt.c: subroutines for drawing horizontal lines */
  2. # include "t.h"
  3. int
  4. ctype(int il, int ic)
  5. {
  6. if (instead[il])
  7. return(0);
  8. if (fullbot[il])
  9. return(0);
  10. il = stynum[il];
  11. return(style[ic][il]);
  12. }
  13. int
  14. min(int a, int b)
  15. {
  16. return(a < b ? a : b);
  17. }
  18. int
  19. fspan(int i, int c)
  20. {
  21. c++;
  22. return(c < ncol && ctype(i, c) == 's');
  23. }
  24. int
  25. lspan(int i, int c)
  26. {
  27. int k;
  28. if (ctype(i, c) != 's')
  29. return(0);
  30. c++;
  31. if (c < ncol && ctype(i, c) == 's')
  32. return(0);
  33. for (k = 0; ctype(i, --c) == 's'; k++)
  34. ;
  35. return(k);
  36. }
  37. int
  38. ctspan(int i, int c)
  39. {
  40. int k;
  41. c++;
  42. for (k = 1; c < ncol && ctype(i, c) == 's'; k++)
  43. c++;
  44. return(k);
  45. }
  46. void
  47. tohcol(int ic)
  48. {
  49. if (ic == 0)
  50. Bprint(&tabout, "\\h'|0'");
  51. else
  52. Bprint(&tabout, "\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
  53. reg(ic - 1, CRIGHT));
  54. }
  55. int
  56. allh(int i)
  57. {
  58. /* return true if every element in line i is horizontal */
  59. /* also at least one must be horizontl */
  60. int c, one, k;
  61. if (fullbot[i])
  62. return(1);
  63. if (i >= nlin)
  64. return(dboxflg || boxflg);
  65. for (one = c = 0; c < ncol; c++) {
  66. k = thish(i, c);
  67. if (k == 0)
  68. return(0);
  69. if (k == 1)
  70. continue;
  71. one = 1;
  72. }
  73. return(one);
  74. }
  75. int
  76. thish(int i, int c)
  77. {
  78. int t;
  79. char *s;
  80. struct colstr *pc;
  81. if (c < 0)
  82. return(0);
  83. if (i < 0)
  84. return(0);
  85. t = ctype(i, c);
  86. if (t == '_' || t == '-')
  87. return('-');
  88. if (t == '=')
  89. return('=');
  90. if (t == '^')
  91. return(1);
  92. if (fullbot[i] )
  93. return(fullbot[i]);
  94. if (t == 's')
  95. return(thish(i, c - 1));
  96. if (t == 0)
  97. return(1);
  98. pc = &table[i][c];
  99. s = (t == 'a' ? pc->rcol : pc->col);
  100. if (s == 0 || (point(s) && *s == 0))
  101. return(1);
  102. if (vspen(s))
  103. return(1);
  104. if (t = barent( s))
  105. return(t);
  106. return(0);
  107. }