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