Example #1
0
File: wc.c Project: maandree/sbase
static void
wc(FILE *fp, const char *str)
{
	int word = 0, rlen;
	Rune c;
	size_t nc = 0, nl = 0, nw = 0;

	while ((rlen = efgetrune(&c, fp, str))) {
		nc += (cmode == 'c' || !cmode) ? rlen : (c != Runeerror);
		if (c == '\n')
			nl++;
		if (!isspacerune(c))
			word = 1;
		else if (word) {
			word = 0;
			nw++;
		}
	}
	if (word)
		nw++;
	tc += nc;
	tl += nl;
	tw += nw;
	output(str, nc, nl, nw);
}
Example #2
0
char *
parse_colors(IxpMsg *m, CTuple *col) {
	static char Ebad[] = "bad color string";
	Rune r;
	char c, *p;
	int i, j;

	/* '#%6x #%6x #%6x' */
	p = (char*)m->pos;
	for(i = 0; i < 3 && p < (char*)m->end; i++) {
		if(*p++ != '#')
			return Ebad;
		for(j = 0; j < 6 && p < (char*)m->end; j++)
			if(!isxdigit(*p++))
				return Ebad;

		chartorune(&r, p);
		if(i < 2) {
			if(r != ' ')
				return Ebad;
			p++;
		}else if(!isspacerune(r) && *p != '\0')
			return Ebad;
	}

	c = *p;
	*p = '\0';
	loadcolor(col, (char*)m->pos);
	*p = c;

	m->pos = (uchar*)p;
	eatrunes(m, isspacerune, 1);
	return nil;
}
Example #3
0
static
void
fixtext1(Item **list)
{
    Itext *text, *ntext;
    Item *it, *prev;
    Rune *s, *s1, *s2;
    int n;

    if(*list == nil)
        return;

    prev = nil;
    for(it=*list; it!=nil; it=prev->next) {
        if(it->tag!=Itexttag || forceitem(it))
            goto Continue;

        text = (Itext *)it;
        s = text->s;
        while(*s && isspacerune(*s))
            s++;
        if(!*s) {
            if(prev == nil)
                prev = *list = it->next;
            else
                prev->next = it->next;

            it->next = nil;
            freeitems(it);
            if(prev == nil)
                return;
            continue;
        }
        n = 0;
        while(s[n] && !isspacerune(s[n]))
            n++;

        if(!s[n])
            goto Continue;

        s1 = runemalloc(n+1);
        s1 = runemove(s1, s, n);
        s1[n] = L'\0';
        s += n;

        while(*s && isspacerune(*s))
            s++;

        if(*s) {
            n = runestrlen(s);
            s2 = runemalloc(n+1);
            runemove(s2, s, n);
            s2[n] = L'\0';
            ntext = emalloc(sizeof(Itext));
            ntext->s = s2;
            ntext->ascent = text->ascent;
            ntext->anchorid = text->anchorid;
            ntext->state = text->state&~(IFbrk|IFbrksp|IFnobrk|IFcleft|IFcright);
            ntext->tag = text->tag;
            ntext->fnt = text->fnt;
            ntext->fg = text->fg;
            ntext->ul = text->ul;
            ntext->next = (Item *)text->next;
            text->next = (Item *)ntext;
        }
        free(text->s);
        text->s = s1;
Continue:
        prev = it;
    }
}
Example #4
0
int
isgraphrune(Rune r)
{
	return !isspacerune(r) && isprintrune(r);
}