128 lines
1.7 KiB
C
128 lines
1.7 KiB
C
/* 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);
|
|
}
|
|
|
|
|