Remove the cruft of the user to have to define the different font styles.
This commit is contained in:
		
							
								
								
									
										60
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								st.c
									
									
									
									
									
								
							@ -336,6 +336,7 @@ static int isfullutf8(char *, int);
 | 
			
		||||
static void *xmalloc(size_t);
 | 
			
		||||
static void *xrealloc(void *, size_t);
 | 
			
		||||
static void *xcalloc(size_t nmemb, size_t size);
 | 
			
		||||
static char *smstrcat(char *, ...);
 | 
			
		||||
 | 
			
		||||
static void (*handler[LASTEvent])(XEvent *) = {
 | 
			
		||||
	[KeyPress] = kpress,
 | 
			
		||||
@ -393,6 +394,44 @@ xcalloc(size_t nmemb, size_t size) {
 | 
			
		||||
	return p;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *
 | 
			
		||||
smstrcat(char *src, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list fmtargs;
 | 
			
		||||
	char *ret, *p, *v;
 | 
			
		||||
	int len, slen, flen;
 | 
			
		||||
 | 
			
		||||
	len = slen = strlen(src);
 | 
			
		||||
 | 
			
		||||
	va_start(fmtargs, src);
 | 
			
		||||
	for(;;) {
 | 
			
		||||
		v = va_arg(fmtargs, char *);
 | 
			
		||||
		if(v == NULL)
 | 
			
		||||
			break;
 | 
			
		||||
		len += strlen(v);
 | 
			
		||||
	}
 | 
			
		||||
	va_end(fmtargs);
 | 
			
		||||
 | 
			
		||||
	p = ret = xmalloc(len+1);
 | 
			
		||||
	memmove(p, src, slen);
 | 
			
		||||
	p += slen;
 | 
			
		||||
 | 
			
		||||
	va_start(fmtargs, src);
 | 
			
		||||
	for(;;) {
 | 
			
		||||
		v = va_arg(fmtargs, char *);
 | 
			
		||||
		if(v == NULL)
 | 
			
		||||
			break;
 | 
			
		||||
		flen = strlen(v);
 | 
			
		||||
		memmove(p, v, flen);
 | 
			
		||||
		p += flen;
 | 
			
		||||
	}
 | 
			
		||||
	va_end(fmtargs);
 | 
			
		||||
 | 
			
		||||
	ret[len] = '\0';
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
utf8decode(char *s, long *u) {
 | 
			
		||||
	uchar c;
 | 
			
		||||
@ -2017,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) {
 | 
			
		||||
initfonts(char *fontstr) {
 | 
			
		||||
	char *fstr;
 | 
			
		||||
 | 
			
		||||
	xinitfont(&dc.font, fontstr);
 | 
			
		||||
	xinitfont(&dc.bfont, bfontstr);
 | 
			
		||||
	xinitfont(&dc.ifont, ifontstr);
 | 
			
		||||
	xinitfont(&dc.ibfont, ibfontstr);
 | 
			
		||||
 | 
			
		||||
	fstr = smstrcat(fontstr, ":weight=bold", NULL);
 | 
			
		||||
	xinitfont(&dc.bfont, fstr);
 | 
			
		||||
	free(fstr);
 | 
			
		||||
 | 
			
		||||
	fstr = smstrcat(fontstr, ":slant=italic,oblique", NULL);
 | 
			
		||||
	xinitfont(&dc.ifont, fstr);
 | 
			
		||||
	free(fstr);
 | 
			
		||||
 | 
			
		||||
	fstr = smstrcat(fontstr, ":weight=bold:slant=italic,oblique", NULL);
 | 
			
		||||
	xinitfont(&dc.ibfont, fstr);
 | 
			
		||||
	free(fstr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@ -2037,7 +2087,7 @@ xinit(void) {
 | 
			
		||||
	xw.vis = XDefaultVisual(xw.dpy, xw.scr);
 | 
			
		||||
 | 
			
		||||
	/* font */
 | 
			
		||||
	initfonts(FONT, BOLDFONT, ITALICFONT, ITALICBOLDFONT);
 | 
			
		||||
	initfonts(FONT);
 | 
			
		||||
 | 
			
		||||
	/* XXX: Assuming same size for bold font */
 | 
			
		||||
	xw.cw = dc.font.rbearing - dc.font.lbearing;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user