ref: c3ba64f6935322f09b6de5c2285544fd471c605d
dir: /sys/src/cmd/tbl/tt.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); }