/* 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);
}
|