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