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