plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

tt.c (1696B)


      1 /* tt.c: subroutines for drawing horizontal lines */
      2 # include "t.h"
      3 
      4 int
      5 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 }
     14 
     15 
     16 int
     17 min(int a, int b)
     18 {
     19 	return(a < b ? a : b);
     20 }
     21 
     22 
     23 int
     24 fspan(int i, int c)
     25 {
     26 	c++;
     27 	return(c < ncol && ctype(i, c) == 's');
     28 }
     29 
     30 
     31 int
     32 lspan(int i, int c)
     33 {
     34 	int	k;
     35 
     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 }
     45 
     46 
     47 int
     48 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 }
     56 
     57 
     58 void
     59 tohcol(int ic)
     60 {
     61 	if (ic == 0)
     62 		Bprint(&tabout, "\\h'|0'");
     63 	else
     64 		Bprint(&tabout, "\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
     65 		     reg(ic - 1, CRIGHT));
     66 }
     67 
     68 
     69 int
     70 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;
     75 
     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 }
     90 
     91 
     92 int
     93 thish(int i, int c)
     94 {
     95 	int	t;
     96 	char	*s;
     97 	struct colstr *pc;
     98 
     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 }