Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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